]> granicus.if.org Git - shadow/commitdiff
* src/useradd.c: Likewise for the default file, faillog, lastlog,
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 21 Mar 2009 19:18:06 +0000 (19:18 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 21 Mar 2009 19:18:06 +0000 (19:18 +0000)
and mail spool.

ChangeLog
src/useradd.c

index 501d783828b5542936c6f93c89b4b8c58c311ffb..71db50c34c551f519be099b45a2370959a5458ff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,8 @@
 
        * lib/commonio.c: Call fsync before closing the backup file. This
        ensures that the backup file is flushed to the storage medium.
+       * src/useradd.c: Likewise for the default file, faillog, lastlog,
+       and mail spool.
 
 2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
 
index cfbe33e2010278dc9ae56a3bfd6b9773e60cc34a..d14767d09822e15a0eea7bf62fdfdb401ec8a29c 100644 (file)
@@ -542,7 +542,9 @@ static int set_defaults (void)
         * the new file is intact.
         */
        (void) fflush (ofp);
-       if ((ferror (ofp) != 0) || (fclose (ofp) != 0)) {
+       if (   (ferror (ofp) != 0)
+           || (fsync (fileno (ofp)) != 0)
+           || (fclose (ofp) != 0)) {
                unlink (new_file);
                return -1;
        }
@@ -1556,6 +1558,7 @@ static void faillog_reset (uid_t uid)
        if (   (-1 == fd)
            || (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
            || (write (fd, &fl, sizeof (fl)) != (ssize_t) sizeof (fl))
+           || (fsync (fd) != 0)
            || (close (fd) != 0)) {
                fprintf (stderr,
                         _("%s: failed to reset the faillog entry of UID %lu: %s\n"),
@@ -1581,6 +1584,7 @@ static void lastlog_reset (uid_t uid)
        if (   (-1 == fd)
            || (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
            || (write (fd, &ll, sizeof (ll)) != (ssize_t) sizeof (ll))
+           || (fsync (fd) != 0)
            || (close (fd) != 0)) {
                fprintf (stderr,
                         _("%s: failed to reset the lastlog entry of UID %lu: %s\n"),
@@ -1750,6 +1754,7 @@ static void create_mail (void)
                        perror (_("Setting mailbox file permissions"));
                }
 
+               fsync (fd);
                close (fd);
        }
 }