- remove functions marked as LEGACY in SUSv3 and use their modern counterparts.
[oweals/busybox.git] / libbb / obscure.c
index 4a8fbf72c742e96ff73d74b044afbc11d60599de..2599095dfca23e0228b3432aadc236d74d12b50f 100644 (file)
        of crypt do not truncate passwords.
 */
 
-#include <ctype.h>
-#include <unistd.h>
-#include <string.h>
-#include <strings.h>
-
 #include "libbb.h"
 
 static int string_checker_helper(const char *p1, const char *p2) __attribute__ ((__pure__));
@@ -66,7 +61,7 @@ static int string_checker(const char *p1, const char *p2)
        /* check string */
        int ret = string_checker_helper(p1, p2);
        /* Make our own copy */
-       char *p = bb_xstrdup(p1);
+       char *p = xstrdup(p1);
        /* reverse string */
        size = strlen(p);
 
@@ -95,21 +90,21 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc
        int c;
        int length;
        int mixed = 0;
-       /* Add 1 for each type of characters to the minlen of password */
+       /* Add 2 for each type of characters to the minlen of password */
        int size = CONFIG_PASSWORD_MINLEN + 8;
        const char *p;
        char hostname[255];
 
        /* size */
        if (!new_p || (length = strlen(new_p)) < CONFIG_PASSWORD_MINLEN)
-               return("too short");
+               return "too short";
 
        /* no username as-is, as sub-string, reversed, capitalized, doubled */
        if (string_checker(new_p, pw->pw_name)) {
                return "similar to username";
        }
        /* no gecos as-is, as sub-string, reversed, capitalized, doubled */
-       if (string_checker(new_p, pw->pw_gecos)) {
+       if (*pw->pw_gecos && string_checker(new_p, pw->pw_gecos)) {
                return "similar to gecos";
        }
        /* hostname as-is, as sub-string, reversed, capitalized, doubled */
@@ -162,14 +157,14 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc
        return NULL;
 }
 
-int obscure(const char *old, const char *newval, const struct passwd *pwdp)
+int obscure(const char *old, const char *newval, const struct passwd *pw)
 {
        const char *msg;
 
-       if ((msg = obscure_msg(old, newval, pwdp))) {
-               printf("Bad password: %s.\n", msg);
-               /* If user is root warn only */
-               return (getuid())? 1 : 0;
+       msg = obscure_msg(old, newval, pw);
+       if (msg) {
+               printf("Bad password: %s\n", msg);
+               return 1;
        }
        return 0;
 }