=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/who/who.c,v retrieving revision 1.20 retrieving revision 1.21 diff -c -r1.20 -r1.21 *** src/usr.bin/who/who.c 2013/08/22 04:43:41 1.20 --- src/usr.bin/who/who.c 2015/10/07 16:11:40 1.21 *************** *** 1,4 **** ! /* $OpenBSD: who.c,v 1.20 2013/08/22 04:43:41 guenther Exp $ */ /* $NetBSD: who.c,v 1.4 1994/12/07 04:28:49 jtc Exp $ */ /* --- 1,4 ---- ! /* $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,77 **** --- 62,87 ---- #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,199 **** { 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; while (fread((char *)&usr, sizeof(usr), 1, ufp) == 1) ! if (*usr.ut_name && !strcmp(usr.ut_line, p)) { output(&usr); return; } /* well, at least we know what the tty is */ ! (void)strncpy(usr.ut_line, p, UT_LINESIZE); } else (void)strncpy(usr.ut_line, "tty??", UT_LINESIZE); --- 189,204 ---- { struct utmp usr; struct passwd *pw; /* search through the utmp and find an entry for this tty */ ! if (mytty) { while (fread((char *)&usr, sizeof(usr), 1, ufp) == 1) ! 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, mytty, UT_LINESIZE); } else (void)strncpy(usr.ut_line, "tty??", UT_LINESIZE); *************** *** 283,288 **** --- 288,300 ---- if (!(ufp = fopen(name, "r"))) { 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); }