adduser: close /etc/{passwd,shadow} before calling passwd etc.
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 14 Jul 2007 22:51:28 +0000 (22:51 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 14 Jul 2007 22:51:28 +0000 (22:51 -0000)
Spotted by Natanael Copa <natanael.copa@gmail.com>

loginutils/adduser.c

index 916a25b89e32c22bc488b59966d732fc9353f628..229bd679d187308abd1d798403e55019a8841580 100644 (file)
@@ -109,8 +109,9 @@ static int adduser(struct passwd *p)
        if (putpwent(p, file) == -1) {
                bb_perror_nomsg_and_die();
        }
-       if (ENABLE_FEATURE_CLEAN_UP)
-               fclose(file);
+       /* Do fclose even if !ENABLE_FEATURE_CLEAN_UP.
+        * We will exec passwd, files must be flushed & closed before that! */
+       fclose(file);
 
 #if ENABLE_FEATURE_SHADOWPASSWDS
        /* add to shadow if necessary */
@@ -123,8 +124,7 @@ static int adduser(struct passwd *p)
                                0,                      /* sp->sp_min */
                                99999,                  /* sp->sp_max */
                                7);                     /* sp->sp_warn */
-               if (ENABLE_FEATURE_CLEAN_UP)
-                       fclose(file);
+               fclose(file);
        }
 #endif
 
@@ -134,7 +134,7 @@ static int adduser(struct passwd *p)
        if (addgroup) addgroup_wrapper(p);
 
        /* Clear the umask for this process so it doesn't
-        * screw up the permissions on the mkdir and chown. */
+        * screw up the permissions on the mkdir and chown. */
        umask(0);
        if (!(option_mask32 & OPT_DONT_MAKE_HOME)) {
                /* Set the owner and group so it is owned by the new user,