summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.bin/finger/util.c8
-rw-r--r--usr.bin/w/w.c8
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);
OpenPOWER on IntegriCloud