-/* $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 $ */
/*
#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) {
{
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);
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);
}