diff options
Diffstat (limited to 'usr.bin/finger/finger.c')
-rw-r--r-- | usr.bin/finger/finger.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/usr.bin/finger/finger.c b/usr.bin/finger/finger.c index 8aafdd5..3eac7eb 100644 --- a/usr.bin/finger/finger.c +++ b/usr.bin/finger/finger.c @@ -91,7 +91,7 @@ __FBSDID("$FreeBSD$"); DB *db; time_t now; -int entries, gflag, lflag, mflag, pplan, sflag, oflag, Tflag; +int entries, gflag, kflag, lflag, mflag, pplan, sflag, oflag, Tflag; sa_family_t family = PF_UNSPEC; int d_first = -1; char tbuf[1024]; @@ -108,7 +108,7 @@ option(int argc, char **argv) optind = 1; /* reset getopt */ - while ((ch = getopt(argc, argv, "46glmpshoT")) != -1) + while ((ch = getopt(argc, argv, "46gklmpshoT")) != -1) switch(ch) { case '4': family = AF_INET; @@ -119,6 +119,9 @@ option(int argc, char **argv) case 'g': gflag = 1; break; + case 'k': + kflag = 1; /* keep going without utmp */ + break; case 'l': lflag = 1; /* long format */ break; @@ -151,7 +154,7 @@ option(int argc, char **argv) static void usage(void) { - (void)fprintf(stderr, "usage: finger [-46lmpshoT] [login ...]\n"); + (void)fprintf(stderr, "usage: finger [-46klmpshoT] [login ...]\n"); exit(1); } @@ -234,6 +237,9 @@ loginlist(void) int r, sflag1; char name[UT_NAMESIZE + 1]; + if (kflag) + errx(1, "can't list logins without reading utmp"); + if (!freopen(_PATH_UTMP, "r", stdin)) err(1, "%s", _PATH_UTMP); name[UT_NAMESIZE] = '\0'; @@ -370,6 +376,9 @@ net: for (p = nargv; *p;) { if (entries == 0) return; + if (kflag) + return; + /* * Scan thru the list of users currently logged in, saving * appropriate data whenever a match occurs. |