From 3bebe991351ce7bc49d0e0c2737fe8e266da81d0 Mon Sep 17 00:00:00 2001 From: Brian Somers Date: Thu, 21 Dec 2000 01:30:47 +0000 Subject: [PATCH] If the utmp login time is greater than the tty atime, use it to calculate the idle time instead of the atime. This makes entries for people that have logged in but done nothing else show up correctly. Reviewed by: markk@knigma.org --- usr.bin/finger/util.c | 8 +++++++- 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 dbf5e5f6fe9..7823ef4dcd1 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 0ead030b84d..6ab256a04bb 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);