From 8a8ef57118fa76ee06d57715f997332a8d3488ec Mon Sep 17 00:00:00 2001 From: Mats Erik Andersson Date: Wed, 5 Sep 2012 22:08:37 +0200 Subject: [PATCH] readutmp: fix non-portable UT_PID use The module readutmp is broken for the standard use read_utmp(..., READ_UTMP_USER_PROCESS | READ_UTMP_CHECK_PIDS) for all releases of FreeBSD until 8.3, and all OpenBSD ever released. The reason is that those systems do not provide `utmp.ut_pid', thus making the macro UT_PID(u) identical to naught, and then turning the predicate UT_PID (u) <= 0 found in desirable_utmp_entry(), into a permanent true clause. This makes desirable_utmp_entry() discard every legitimate user's UTMP entry for said BSD releases. NetBSD and DragonflyBSD are not touched by this malfunction. Copyright-paperwork-exempt: yes * lib/readutmp.c (desirable_utmp_entry) : Use `UT_PID (u) > 0' as absolute condition. --- ChangeLog | 6 ++++++ lib/readutmp.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0874c8146..dea1f8667 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-09-05 Mats Erik Andersson (tiny change) + + readutmp: fix non-portable UT_PID use + * lib/readutmp.c (desirable_utmp_entry) : + Use `UT_PID (u) > 0' as absolute condition. + 2012-09-04 Jim Meyering fts: reduce two or more trailing spaces to just one, usually diff --git a/lib/readutmp.c b/lib/readutmp.c index f89dd68fe..ef6277a68 100644 --- a/lib/readutmp.c +++ b/lib/readutmp.c @@ -69,8 +69,8 @@ desirable_utmp_entry (STRUCT_UTMP const *u, int options) return false; if ((options & READ_UTMP_CHECK_PIDS) && user_proc - && (UT_PID (u) <= 0 - || (kill (UT_PID (u), 0) < 0 && errno == ESRCH))) + && 0 < UT_PID (u) + && (kill (UT_PID (u), 0) < 0 && errno == ESRCH)) return false; return true; } -- 2.11.0