]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysusers: make sure to reset the returned value when EOF is reached in fget*ent_sane...
authorFranck Bui <fbui@suse.com>
Wed, 18 Apr 2018 16:32:21 +0000 (18:32 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 18 Apr 2018 16:32:21 +0000 (18:32 +0200)
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
src/basic/user-util.c
test/TEST-21-SYSUSERS/test-12.expected-group [new file with mode: 0644]
test/TEST-21-SYSUSERS/test-12.expected-passwd [new file with mode: 0644]
test/TEST-21-SYSUSERS/test-12.initial-group [new file with mode: 0644]
test/TEST-21-SYSUSERS/test-12.initial-passwd [new file with mode: 0644]
test/TEST-21-SYSUSERS/test-12.input [new file with mode: 0644]

index 1effd55b0237bab3f02455e8459cda452fbe0b06..0f0f21dbcf33d01bd5cc39417537c64823dc4a7c 100644 (file)
@@ -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
diff --git a/test/TEST-21-SYSUSERS/test-12.expected-group b/test/TEST-21-SYSUSERS/test-12.expected-group
new file mode 100644 (file)
index 0000000..5d94846
--- /dev/null
@@ -0,0 +1,2 @@
+root:x:0:
+systemd-coredump:x:1:
diff --git a/test/TEST-21-SYSUSERS/test-12.expected-passwd b/test/TEST-21-SYSUSERS/test-12.expected-passwd
new file mode 100644 (file)
index 0000000..75fe9b4
--- /dev/null
@@ -0,0 +1,2 @@
+root:x:0:0:root:/root:/bin/bash
+systemd-coredump:x:1:1:systemd Core Dumper:/:/sbin/nologin
diff --git a/test/TEST-21-SYSUSERS/test-12.initial-group b/test/TEST-21-SYSUSERS/test-12.initial-group
new file mode 100644 (file)
index 0000000..1dbf901
--- /dev/null
@@ -0,0 +1 @@
+root:x:0:
diff --git a/test/TEST-21-SYSUSERS/test-12.initial-passwd b/test/TEST-21-SYSUSERS/test-12.initial-passwd
new file mode 100644 (file)
index 0000000..aebc492
--- /dev/null
@@ -0,0 +1 @@
+root:x:0:0:root:/root:/bin/bash
diff --git a/test/TEST-21-SYSUSERS/test-12.input b/test/TEST-21-SYSUSERS/test-12.input
new file mode 100644 (file)
index 0000000..2913120
--- /dev/null
@@ -0,0 +1 @@
+u systemd-coredump  1 "systemd Core Dumper"