diff options
Diffstat (limited to 'usr.bin/who/who.c')
-rw-r--r-- | usr.bin/who/who.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/usr.bin/who/who.c b/usr.bin/who/who.c index 3506affc337..63dc95c83b4 100644 --- a/usr.bin/who/who.c +++ b/usr.bin/who/who.c @@ -1,4 +1,4 @@ -/* $OpenBSD: who.c,v 1.20 2013/08/22 04:43:41 guenther Exp $ */ +/* $OpenBSD: who.c,v 1.21 2015/10/07 16:11:40 semarie Exp $ */ /* $NetBSD: who.c,v 1.4 1994/12/07 04:28:49 jtc Exp $ */ /* @@ -62,16 +62,26 @@ int show_quick; /* quick, names only */ #define HOST_WIDTH 45 int hostwidth = HOST_WIDTH; +char *mytty; int main(int argc, char *argv[]) { struct utmp usr; FILE *ufp; + char *t; int c; setlocale(LC_ALL, ""); + if (tame("stdio getpw rpath ioctl", NULL) == -1) + err(1, "tame"); + + mytty = ttyname(0); + /* strip any directory component */ + if ((t = strrchr(mytty, '/'))) + mytty = t + 1; + only_current_term = show_term = show_idle = show_labels = 0; show_quick = 0; while ((c = getopt(argc, argv, "HmqTu")) != -1) { @@ -179,21 +189,16 @@ who_am_i(FILE *ufp) { struct utmp usr; struct passwd *pw; - char *p; - char *t; /* search through the utmp and find an entry for this tty */ - if ((p = ttyname(0))) { - /* strip any directory component */ - if ((t = strrchr(p, '/'))) - p = t + 1; + if (mytty) { while (fread((char *)&usr, sizeof(usr), 1, ufp) == 1) - if (*usr.ut_name && !strcmp(usr.ut_line, p)) { + if (*usr.ut_name && !strcmp(usr.ut_line, mytty)) { output(&usr); return; } /* well, at least we know what the tty is */ - (void)strncpy(usr.ut_line, p, UT_LINESIZE); + (void)strncpy(usr.ut_line, mytty, UT_LINESIZE); } else (void)strncpy(usr.ut_line, "tty??", UT_LINESIZE); @@ -284,6 +289,13 @@ file(char *name) err(1, "%s", name); /* NOTREACHED */ } + if (show_term || show_idle) { + if (tame("stdio getpw rpath", NULL) == -1) + err(1, "tame"); + } else { + if (tame("stdio getpw", NULL) == -1) + err(1, "tame"); + } return(ufp); } |