]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
chpasswd: add get_salt for generating salt value
authorjuyin <zhuyan34@huawei.com>
Thu, 31 Mar 2022 08:45:19 +0000 (16:45 +0800)
committerSerge Hallyn <serge@hallyn.com>
Mon, 4 Apr 2022 02:07:09 +0000 (21:07 -0500)
The function that generates the salt value is extracted separately, and it is more convenient to modify it later.

src/chpasswd.c

index cd2d1cf0463c04de411b13941d2b28055eddbedc..94e923abee43e7f59a87785e87bc8e345db6596f 100644 (file)
@@ -392,12 +392,49 @@ static void close_files (void)
        pw_locked = false;
 }
 
+static const char *get_salt(void)
+{
+       if (   !eflg
+               && (   (NULL == crypt_method)
+                       || (0 != strcmp (crypt_method, "NONE")))) {
+               void *arg = NULL;
+
+               if (md5flg) {
+                       crypt_method = "MD5";
+               }
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT) || defined(USE_YESCRYPT)
+               if (sflg) {
+#if defined(USE_SHA_CRYPT)
+                       if (   (0 == strcmp (crypt_method, "SHA256"))
+                               || (0 == strcmp (crypt_method, "SHA512"))) {
+                               arg = &sha_rounds;
+                       }
+#endif                         /* USE_SHA_CRYPT */
+#if defined(USE_BCRYPT)
+                       if (0 == strcmp (crypt_method, "BCRYPT")) {
+                               arg = &bcrypt_rounds;
+                       }
+#endif                         /* USE_BCRYPT */
+#if defined(USE_YESCRYPT)
+                       if (0 == strcmp (crypt_method, "YESCRYPT")) {
+                               arg = &yescrypt_cost;
+                       }
+#endif                         /* USE_YESCRYPT */
+               }
+#endif
+               return crypt_make_salt (crypt_method, arg);
+       }
+
+       return NULL;
+}
+
 int main (int argc, char **argv)
 {
        char buf[BUFSIZ];
        char *name;
        char *newpwd;
        char *cp;
+       const char *salt;
 
 #ifdef USE_PAM
        bool use_pam = true;
@@ -508,35 +545,8 @@ int main (int argc, char **argv)
                const struct passwd *pw;
                struct passwd newpw;
 
-               if (   !eflg
-                   && (   (NULL == crypt_method)
-                       || (0 != strcmp (crypt_method, "NONE")))) {
-                       void *arg = NULL;
-                       const char *salt;
-                       if (md5flg) {
-                               crypt_method = "MD5";
-                       }
-#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT) || defined(USE_YESCRYPT)
-                       if (sflg) {
-#if defined(USE_SHA_CRYPT)
-                               if (   (0 == strcmp (crypt_method, "SHA256"))
-                                       || (0 == strcmp (crypt_method, "SHA512"))) {
-                                       arg = &sha_rounds;
-                               }
-#endif                         /* USE_SHA_CRYPT */
-#if defined(USE_BCRYPT)
-                               if (0 == strcmp (crypt_method, "BCRYPT")) {
-                                       arg = &bcrypt_rounds;
-                               }
-#endif                         /* USE_BCRYPT */
-#if defined(USE_YESCRYPT)
-                               if (0 == strcmp (crypt_method, "YESCRYPT")) {
-                                       arg = &yescrypt_cost;
-                               }
-#endif                         /* USE_YESCRYPT */
-                       }
-#endif
-                       salt = crypt_make_salt (crypt_method, arg);
+               salt = get_salt();
+               if (salt) {
                        cp = pw_encrypt (newpwd, salt);
                        if (NULL == cp) {
                                fprintf (stderr,