]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysusers: add fsync for passwd (#24324)
authorAvram Lubkin <avylove@rockhopper.net>
Tue, 16 Aug 2022 12:51:21 +0000 (08:51 -0400)
committerGitHub <noreply@github.com>
Tue, 16 Aug 2022 12:51:21 +0000 (21:51 +0900)
https://github.com/systemd/systemd/pull/6636 added `fsync()` when
temporary shadow, group, and gshadow files are created, but it was
not added for passwd. As far as I can tell, this seems to have been
an oversight. I'm seeing real world issues where a blank /etc/passwd
file is being created if a machine loses power early in the boot process.

src/sysusers/sysusers.c

index dfb703f10ec3bd5fa5b5c3fd2b375f964f684a7c..9c1abf984ecdf3886d063d08ed0b349c9469a1ec 100644 (file)
@@ -507,7 +507,7 @@ static int write_temporary_passwd(const char *passwd_path, FILE **tmpfile, char
                         break;
         }
 
-        r = fflush_and_check(passwd);
+        r = fflush_sync_and_check(passwd);
         if (r < 0)
                 return log_debug_errno(r, "Failed to flush %s: %m", passwd_tmp);