diff options
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/finger/util.c | 8 | ||||
-rw-r--r-- | usr.bin/w/w.c | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/usr.bin/finger/util.c b/usr.bin/finger/util.c index dbf5e5f..7823ef4 100644 --- a/usr.bin/finger/util.c +++ b/usr.bin/finger/util.c @@ -323,13 +323,19 @@ find_idle_and_ttywrite(w) { extern time_t now; struct stat sb; + time_t touched; (void)snprintf(tbuf, sizeof(tbuf), "%s/%s", _PATH_DEV, w->tty); if (stat(tbuf, &sb) < 0) { warn("%s", tbuf); return; } - w->idletime = now < sb.st_atime ? 0 : now - sb.st_atime; + touched = sb.st_atime; + if (touched < w->loginat) { + /* tty untouched since before login */ + touched = w->loginat; + } + w->idletime = now < touched ? 0 : now - touched; #define TALKABLE 0220 /* tty is writable if 220 mode */ w->writable = ((sb.st_mode & TALKABLE) == TALKABLE); diff --git a/usr.bin/w/w.c b/usr.bin/w/w.c index 0ead030..6ab256a 100644 --- a/usr.bin/w/w.c +++ b/usr.bin/w/w.c @@ -134,6 +134,7 @@ main(argc, argv) struct stat *stp; FILE *ut; u_long l; + time_t touched; int ch, i, nentries, nusers, wcmd, longidle, dropgid; char *memf, *nlistf, *p, *x; char buf[MAXHOSTNAMELEN], errbuf[256]; @@ -246,7 +247,12 @@ main(argc, argv) (void)sysctl(mib, 2, &ep->tdev, &size, NULL, 0); } #endif - if ((ep->idle = now - stp->st_atime) < 0) + touched = stp->st_atime; + if (touched < ep->utmp.ut_time) { + /* tty untouched since before login */ + touched = ep->utmp.ut_time; + } + if ((ep->idle = now - touched) < 0) ep->idle = 0; } (void)fclose(ut); |