passwd,chpasswd: reset password in /etc/passwd to "x" if /etc/shadow was updated
authorTito Ragusa <farmatito@tiscali.it>
Mon, 4 Apr 2011 22:18:33 +0000 (00:18 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 4 Apr 2011 22:18:33 +0000 (00:18 +0200)
Signed-off-by: Tito Ragusa <farmatito@tiscali.it>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
loginutils/chpasswd.c
loginutils/passwd.c

index c2d86664d23da0456f7665a6cd82915cb7969944..6c4296faa0ff916e48bbe59a9b1adf1f7f6a6ec8 100644 (file)
@@ -67,7 +67,10 @@ int chpasswd_main(int argc UNUSED_PARAM, char **argv)
                 * we try to find & change his passwd in /etc/passwd */
 #if ENABLE_FEATURE_SHADOWPASSWDS
                rc = update_passwd(bb_path_shadow_file, name, pass, NULL);
-               if (rc == 0) /* no lines updated, no errors detected */
+               if (rc > 0) /* password in /etc/shadow was updated */
+                       pass = (char*)"x";
+               if (rc >= 0)
+                       /* 0 = /etc/shadow missing (not an error), >0 = passwd changed in /etc/shadow */
 #endif
                        rc = update_passwd(bb_path_passwd_file, name, pass, NULL);
                /* LOGMODE_BOTH logs to syslog also */
index 8b6a63eecb680a676333b9c31e63acf3c46dedad..810644e61b61b3297074b77150ca55c2fe96cbf3 100644 (file)
@@ -184,8 +184,7 @@ int passwd_main(int argc UNUSED_PARAM, char **argv)
                 * strdup'ing to avoid nasty surprizes */
                newp = xstrdup(&pw->pw_passwd[1]);
        } else if (opt & OPT_delete) {
-               //newp = xstrdup("");
-               newp = (char*)"";
+               newp = (char*)""; //xstrdup("");
        }
 
        rlimit_fsize.rlim_cur = rlimit_fsize.rlim_max = 512L * 30000;
@@ -201,7 +200,11 @@ int passwd_main(int argc UNUSED_PARAM, char **argv)
 #if ENABLE_FEATURE_SHADOWPASSWDS
        filename = bb_path_shadow_file;
        rc = update_passwd(bb_path_shadow_file, name, newp, NULL);
-       if (rc == 0) /* no lines updated, no errors detected */
+       if (rc > 0)
+               /* password in /etc/shadow was updated */
+               newp = (char*) "x"; //xstrdup("x");
+       if (rc >= 0)
+               /* 0 = /etc/shadow missing (not an error), >0 = passwd changed in /etc/shadow */
 #endif
        {
                filename = bb_path_passwd_file;