diff options
author | Franck Bui <fbui@suse.com> | 2018-04-18 18:32:21 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-04-18 18:32:21 +0200 |
commit | 80359410c4056ffa9113837cebac8bdfde3f3ac2 (patch) | |
tree | a6b09971e307c1bb9b8bbc4b2b4507b7c9041d08 /src/basic/user-util.c | |
parent | 613bddf7d1140be34569a68b49eda7415e67e070 (diff) | |
download | systemd-80359410c4056ffa9113837cebac8bdfde3f3ac2.tar.gz systemd-80359410c4056ffa9113837cebac8bdfde3f3ac2.tar.bz2 systemd-80359410c4056ffa9113837cebac8bdfde3f3ac2.zip |
sysusers: make sure to reset the returned value when EOF is reached in fget*ent_sane() wrappers (#8737)
To indicate that the there're no more entries, these wrappers return false but
did leave the passed pointed unmodified.
However EOF is not an error and is a very common case so initialize the output
argument to NULL even in this case so callers don't need to do that.
Fixes: #8721
Diffstat (limited to 'src/basic/user-util.c')
-rw-r--r-- | src/basic/user-util.c | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/src/basic/user-util.c b/src/basic/user-util.c index 1effd55b02..0f0f21dbcf 100644 --- a/src/basic/user-util.c +++ b/src/basic/user-util.c @@ -775,14 +775,11 @@ int fgetpwent_sane(FILE *stream, struct passwd **pw) { errno = 0; p = fgetpwent(stream); - if (p == NULL) { - if (errno == ENOENT) - return false; + if (p == NULL && errno != ENOENT) return errno > 0 ? -errno : -EIO; - } *pw = p; - return true; + return p != NULL; } int fgetspent_sane(FILE *stream, struct spwd **sp) { @@ -793,14 +790,11 @@ int fgetspent_sane(FILE *stream, struct spwd **sp) { errno = 0; s = fgetspent(stream); - if (s == NULL) { - if (errno == ENOENT) - return false; + if (s == NULL && errno != ENOENT) return errno > 0 ? -errno : -EIO; - } *sp = s; - return true; + return s != NULL; } int fgetgrent_sane(FILE *stream, struct group **gr) { @@ -811,14 +805,11 @@ int fgetgrent_sane(FILE *stream, struct group **gr) { errno = 0; g = fgetgrent(stream); - if (g == NULL) { - if (errno == ENOENT) - return false; + if (g == NULL && errno != ENOENT) return errno > 0 ? -errno : -EIO; - } *gr = g; - return true; + return g != NULL; } #if ENABLE_GSHADOW @@ -830,13 +821,10 @@ int fgetsgent_sane(FILE *stream, struct sgrp **sg) { errno = 0; s = fgetsgent(stream); - if (s == NULL) { - if (errno == ENOENT) - return false; + if (s == NULL && errno != ENOENT) return errno > 0 ? -errno : -EIO; - } *sg = s; - return true; + return s != NULL; } #endif |