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) <READ_UTMP_CHECK_PIDS>:
Use `UT_PID (u) > 0' as absolute condition.
+2012-09-05 Mats Erik Andersson <gnu@gisladisker.se> (tiny change)
+
+ readutmp: fix non-portable UT_PID use
+ * lib/readutmp.c (desirable_utmp_entry) <READ_UTMP_CHECK_PIDS>:
+ Use `UT_PID (u) > 0' as absolute condition.
+
2012-09-04 Jim Meyering <meyering@redhat.com>
fts: reduce two or more trailing spaces to just one, usually
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;
}