summaryrefslogtreecommitdiffstats
path: root/usr.bin/finger
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2003-04-02 20:22:29 +0000
committerrwatson <rwatson@FreeBSD.org>2003-04-02 20:22:29 +0000
commit021eeb20207634119a2920f756b6eba04148bbf9 (patch)
treef72c83dc9edbf32b99a0125f281f577ae7fca0c8 /usr.bin/finger
parent7d92e4785f93cada96cb5d56ef4c5685d58884d9 (diff)
downloadFreeBSD-src-021eeb20207634119a2920f756b6eba04148bbf9.zip
FreeBSD-src-021eeb20207634119a2920f756b6eba04148bbf9.tar.gz
If stat() on the terminal specified in utmp fails due to ENOENT, don't
print a warning, and set the idletime variable for the entry to -1; then pick up the -1 later in sprint() and lprint() and ignore those idle times by printing just whitespace. When third party applications, such as kdm, insert utmp entries, they sometimes use strings like ":0", which can't be stat()'d and currently result in warnings that are not helpful to the user.
Diffstat (limited to 'usr.bin/finger')
-rw-r--r--usr.bin/finger/lprint.c3
-rw-r--r--usr.bin/finger/sprint.c5
-rw-r--r--usr.bin/finger/util.c15
3 files changed, 21 insertions, 2 deletions
diff --git a/usr.bin/finger/lprint.c b/usr.bin/finger/lprint.c
index 16a10a5..d74b21e 100644
--- a/usr.bin/finger/lprint.c
+++ b/usr.bin/finger/lprint.c
@@ -189,7 +189,8 @@ no_gecos:
* idle time. Follow with a comma if a remote login.
*/
delta = gmtime(&w->idletime);
- if (delta->tm_yday || delta->tm_hour || delta->tm_min) {
+ if (w->idletime != -1 && (delta->tm_yday ||
+ delta->tm_hour || delta->tm_min)) {
cpr += printf("%-*s idle ",
maxlen - (int)strlen(w->tty) + 1, ",");
if (delta->tm_yday > 0) {
diff --git a/usr.bin/finger/sprint.c b/usr.bin/finger/sprint.c
index 396c86e..51a1919 100644
--- a/usr.bin/finger/sprint.c
+++ b/usr.bin/finger/sprint.c
@@ -167,6 +167,11 @@ stimeprint(WHERE *w)
{
struct tm *delta;
+ if (w->idletime == -1) {
+ (void)printf(" ");
+ return;
+ }
+
delta = gmtime(&w->idletime);
if (!delta->tm_yday)
if (!delta->tm_hour)
diff --git a/usr.bin/finger/util.c b/usr.bin/finger/util.c
index 229d58a..3ac5a06 100644
--- a/usr.bin/finger/util.c
+++ b/usr.bin/finger/util.c
@@ -314,10 +314,23 @@ find_idle_and_ttywrite(WHERE *w)
{
struct stat sb;
time_t touched;
+ int error;
(void)snprintf(tbuf, sizeof(tbuf), "%s/%s", _PATH_DEV, w->tty);
- if (stat(tbuf, &sb) < 0) {
+
+ error = stat(tbuf, &sb);
+ if (error < 0 && errno == ENOENT) {
+ /*
+ * The terminal listed is not actually a terminal (i.e.,
+ * ":0"). This is a failure, so we'll skip printing
+ * out the idle time, which is non-ideal but better
+ * than a bogus warning and idle time.
+ */
+ w->idletime = -1;
+ return;
+ } else if (error < 0) {
warn("%s", tbuf);
+ w->idletime = -1;
return;
}
touched = sb.st_atime;
OpenPOWER on IntegriCloud