write: improve function and variable names

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2016-05-07 12:36:44 +01:00
parent b5a6937961
commit d732758e65
No known key found for this signature in database
GPG Key ID: A9553245FDE9B739
1 changed files with 35 additions and 38 deletions

View File

@ -95,10 +95,10 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out)
}
/*
* term_chk - check that a terminal exists, and get the message bit
* check_tty - check that a terminal exists, and get the message bit
* and the access time
*/
static int term_chk(char *tty, int *msgsokP, time_t * atimeP, int showerror)
static int check_tty(char *tty, int *tty_writeable, time_t *tty_atime, int showerror)
{
struct stat s;
char path[PATH_MAX];
@ -112,19 +112,19 @@ static int term_chk(char *tty, int *msgsokP, time_t * atimeP, int showerror)
return 1;
}
if (getuid() == 0) /* root can always write */
*msgsokP = 1;
*tty_writeable = 1;
else
*msgsokP = (s.st_mode & S_IWGRP) && (getegid() == s.st_gid);
if (atimeP)
*atimeP = s.st_atime;
*tty_writeable = (s.st_mode & S_IWGRP) && (getegid() == s.st_gid);
if (tty_atime)
*tty_atime = s.st_atime;
return 0;
}
/*
* utmp_chk - checks that the given user is actually logged in on
* check_utmp - checks that the given user is actually logged in on
* the given tty
*/
static int utmp_chk(const struct write_control *ctl)
static int check_utmp(const struct write_control *ctl)
{
struct utmp u;
struct utmp *uptr;
@ -161,25 +161,22 @@ static void search_utmp(struct write_control *ctl)
{
struct utmp u;
struct utmp *uptr;
time_t bestatime, atime;
int nloggedttys, nttys, msgsok = 0, user_is_me;
time_t best_atime = 0, tty_atime;
int num_ttys = 0, valid_ttys = 0, tty_writeable = 0, user_is_me = 0;
char atty[sizeof(u.ut_line) + 1];
utmpname(_PATH_UTMP);
setutent();
nloggedttys = nttys = 0;
bestatime = 0;
user_is_me = 0;
while ((uptr = getutent())) {
memcpy(&u, uptr, sizeof(u));
if (strncmp(ctl->dst_login, u.ut_user, sizeof(u.ut_user)) == 0) {
++nloggedttys;
num_ttys++;
xstrncpy(atty, u.ut_line, sizeof(atty));
if (term_chk(atty, &msgsok, &atime, 0))
if (check_tty(atty, &tty_writeable, &tty_atime, 0))
/* bad term? skip */
continue;
if (ctl->src_uid && !msgsok)
if (ctl->src_uid && !tty_writeable)
/* skip ttys with msgs off */
continue;
if (strcmp(atty, ctl->src_tty) == 0) {
@ -190,25 +187,25 @@ static void search_utmp(struct write_control *ctl)
if (u.ut_type != USER_PROCESS)
/* it's not a valid entry */
continue;
++nttys;
if (atime > bestatime) {
bestatime = atime;
valid_ttys++;
if (tty_atime > best_atime) {
best_atime = tty_atime;
xstrncpy(ctl->dst_tty, atty, sizeof(ctl->dst_tty));
}
}
}
endutent();
if (nloggedttys == 0)
if (num_ttys == 0)
errx(EXIT_FAILURE, _("%s is not logged in"), ctl->dst_login);
if (nttys == 0) {
if (valid_ttys == 0) {
if (user_is_me) {
/* ok, so write to yourself! */
xstrncpy(ctl->dst_tty, ctl->src_tty, sizeof(ctl->dst_tty));
return;
}
errx(EXIT_FAILURE, _("%s has messages disabled"), ctl->dst_login);
} else if (nttys > 1) {
} else if (valid_ttys > 1) {
warnx(_("%s is logged in more than once; writing to %s"),
ctl->dst_login, ctl->dst_tty);
}
@ -224,10 +221,10 @@ static void signal_handler(int signo)
}
/*
* wr_fputs - like fputs(), but makes control characters visible and
* write_line - like fputs(), but makes control characters visible and
* turns \n into \r\n.
*/
static void wr_fputs(char *s)
static void write_line(char *s)
{
char c;
@ -248,7 +245,7 @@ static void wr_fputs(char *s)
*/
static void do_write(const struct write_control *ctl)
{
char *login, *pwuid, *nows;
char *login, *pwuid, *time_stamp;
struct passwd *pwd;
time_t now;
char path[PATH_MAX], *host, line[512];
@ -280,29 +277,29 @@ static void do_write(const struct write_control *ctl)
host = xstrdup("???");
now = time((time_t *) NULL);
nows = ctime(&now);
nows[16] = '\0';
time_stamp = ctime(&now);
time_stamp[16] = '\0';
printf("\r\n\007\007\007");
if (strcmp(login, pwuid))
printf(_("Message from %s@%s (as %s) on %s at %s ..."),
login, host, pwuid, ctl->src_tty, nows + 11);
login, host, pwuid, ctl->src_tty, time_stamp + 11);
else
printf(_("Message from %s@%s on %s at %s ..."),
login, host, ctl->src_tty, nows + 11);
login, host, ctl->src_tty, time_stamp + 11);
free(host);
printf("\r\n");
while (fgets(line, sizeof(line), stdin) != NULL) {
if (signal_received)
break;
wr_fputs(line);
write_line(line);
}
printf("EOF\r\n");
}
int main(int argc, char **argv)
{
int msgsok = 0, src_fd, c;
int tty_writeable = 0, src_fd, c;
struct write_control ctl = { 0 };
static const struct option longopts[] = {
@ -344,17 +341,17 @@ int main(int argc, char **argv)
/*
* We may have /dev/ttyN but also /dev/pts/xx. Below,
* term_chk() will put "/dev/" in front, so remove that
* check_tty() will put "/dev/" in front, so remove that
* part.
*/
if (!strncmp(ctl.src_tty, "/dev/", 5))
ctl.src_tty += 5;
if (term_chk(ctl.src_tty, &msgsok, NULL, 1))
if (check_tty(ctl.src_tty, &tty_writeable, NULL, 1))
exit(EXIT_FAILURE);
if (!msgsok)
if (!tty_writeable)
errx(EXIT_FAILURE,
_("you have write permission turned off"));
msgsok = 0;
tty_writeable = 0;
} else
ctl.src_tty = "<no tty>";
@ -373,13 +370,13 @@ int main(int argc, char **argv)
xstrncpy(ctl.dst_tty, argv[2] + 5, sizeof(ctl.dst_tty));
else
xstrncpy(ctl.dst_tty, argv[2], sizeof(ctl.dst_tty));
if (utmp_chk(&ctl))
if (check_utmp(&ctl))
errx(EXIT_FAILURE,
_("%s is not logged in on %s"),
ctl.dst_login, ctl.dst_tty);
if (term_chk(ctl.dst_tty, &msgsok, NULL, 1))
if (check_tty(ctl.dst_tty, &tty_writeable, NULL, 1))
exit(EXIT_FAILURE);
if (ctl.src_uid && !msgsok)
if (ctl.src_uid && !tty_writeable)
errx(EXIT_FAILURE,
_("%s has messages disabled on %s"),
ctl.dst_login, ctl.dst_tty);