OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- a/loginutils/chpasswd.c
+++ b/loginutils/chpasswd.c
@@ -97,6 +97,11 @@ int chpasswd_main(int argc UNUSED_PARAM,
 
                        crypt_make_pw_salt(salt, algo);
                        free_me = pass = pw_encrypt(pass, salt, 0);
+
+                       if (pass[0] == 0) {
+                               free(free_me);
+                               bb_perror_msg_and_die("password encryption failed");
+                       }
                }
 
                /* This is rather complex: if user is not found in /etc/shadow,
--- a/loginutils/cryptpw.c
+++ b/loginutils/cryptpw.c
@@ -95,7 +95,7 @@ int cryptpw_main(int argc UNUSED_PARAM,
        /* Supports: cryptpw -m sha256 PASS 'rounds=999999999$SALT' */
        char salt[MAX_PW_SALT_LEN + sizeof("rounds=999999999$")];
        char *salt_ptr;
-       char *password;
+       char *password, *hash;
        const char *opt_m, *opt_S;
        int fd;
 
@@ -140,8 +140,12 @@ int cryptpw_main(int argc UNUSED_PARAM,
                /* may still be NULL on EOF/error */
        }
 
-       if (password)
-               puts(pw_encrypt(password, salt, 1));
+       if (password) {
+               hash = pw_encrypt(password, salt, 1);
+               if (hash[0] == 0)
+                       bb_perror_msg_and_die("password encryption failed");
+               puts(hash);
+       }
 
        return EXIT_SUCCESS;
 }
--- a/loginutils/passwd.c
+++ b/loginutils/passwd.c
@@ -187,6 +187,10 @@ int passwd_main(int argc UNUSED_PARAM, c
                if (!newp) {
                        logmode = LOGMODE_STDIO;
                        bb_error_msg_and_die("password for %s is unchanged", name);
+               } else if (newp[0] == 0) {
+                       logmode = LOGMODE_STDIO;
+                       free(newp);
+                       bb_perror_msg_and_die("password encryption failed");
                }
        } else if (opt & OPT_lock) {
                if (!c)