--- bsd-finger-0.17/finger/finger.c.utmp 2004-06-15 11:38:24.000000000 -0400 +++ bsd-finger-0.17/finger/finger.c 2004-06-15 12:22:15.000000000 -0400 @@ -75,6 +75,8 @@ #include #include #include +#include +#include #include "finger.h" #ifdef _USAGI #include "version.h" @@ -224,6 +226,8 @@ #ifdef USER_PROCESS if (uptr->ut_type != USER_PROCESS) continue; #endif + if (kill(uptr->ut_pid, 0) < 0 && errno == ESRCH) + continue; if ((pn = find_person(uptr->ut_name)) == NULL) { memcpy(name, uptr->ut_name, UT_NAMESIZE); if ((pw = getpwnam(name)) == NULL) @@ -331,6 +335,8 @@ #ifdef USER_PROCESS if (uptr->ut_type != USER_PROCESS) continue; #endif + if (kill(uptr->ut_pid, 0) < 0 && errno == ESRCH) + continue; if ((pn = find_person(uptr->ut_name)) == NULL) { continue; } --- bsd-finger-0.17/finger/util.c.utmp 2004-06-15 11:38:24.000000000 -0400 +++ bsd-finger-0.17/finger/util.c 2004-06-15 11:38:24.000000000 -0400 @@ -71,6 +71,8 @@ } snprintf(tbuf, TBUFLEN, "%s/%s", _PATH_DEV, w->tty); if (stat(tbuf, &sb) < 0) { + w->idletime = 0; /* No tty no write, no idle data */ + w->writable = 0; switch (errno) { case ENOENT: break;