diff options
author | Mats Erik Andersson <mats.andersson@gisladisker.se> | 2012-09-05 22:08:37 +0200 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2012-09-05 15:19:04 -0600 |
commit | 8a8ef57118fa76ee06d57715f997332a8d3488ec (patch) | |
tree | 4c90ea797f4bac6f8d47b6cdde80eff3b6cabb60 | |
parent | 0815daf810f59e2da6778367a2000bdd25af71b4 (diff) | |
download | gnulib-8a8ef57118fa76ee06d57715f997332a8d3488ec.tar.gz |
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) <READ_UTMP_CHECK_PIDS>:
Use `UT_PID (u) > 0' as absolute condition.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/readutmp.c | 4 |
2 files changed, 8 insertions, 2 deletions
@@ -1,3 +1,9 @@ +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 diff --git a/lib/readutmp.c b/lib/readutmp.c index f89dd68fe6..ef6277a680 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; } |