X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=libbb%2Fobscure.c;h=19b87523ec6c5a6f17f52dd1d461d4c0ea65de57;hb=f125b6d341b06fda5412b82d23e486100e107eaa;hp=1112e11cb70f9b47f5818001241b8835a2323a36;hpb=c9f423a93d969e91b82d8ecfb694076b460c8887;p=oweals%2Fbusybox.git diff --git a/libbb/obscure.c b/libbb/obscure.c index 1112e11cb..19b87523e 100644 --- a/libbb/obscure.c +++ b/libbb/obscure.c @@ -39,11 +39,6 @@ of crypt do not truncate passwords. */ -#include -#include -#include -#include - #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); @@ -98,27 +93,26 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc /* Add 2 for each type of characters to the minlen of password */ int size = CONFIG_PASSWORD_MINLEN + 8; const char *p; - char hostname[255]; + char *hostname; /* 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 */ - if (gethostname(hostname, 255) == 0) { - hostname[254] = '\0'; - if (string_checker(new_p, hostname)) { - return "similar to hostname"; - } - } + hostname = safe_gethostname(); + i = string_checker(new_p, hostname); + free(hostname); + if (i) + return "similar to hostname"; /* Should / Must contain a mix of: */ for (i = 0; i < length; i++) { @@ -135,7 +129,8 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc c = 0; p = new_p; while (1) { - if ((p = strchr(p, new_p[i])) == NULL) { + p = strchr(p, new_p[i]); + if (p == NULL) { break; } c++; @@ -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 FAST_FUNC 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; }