X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fobscure.c;h=19b87523ec6c5a6f17f52dd1d461d4c0ea65de57;hb=9f5a577a3241597cb5e7ba9f6df33c2e3c440e44;hp=9ac6bcd82ac4b2db2a0891e7d1b282e6d18f84f3;hpb=d921b2ecc0d294ad4bf8c7458fc52a60c28727d2;p=oweals%2Fbusybox.git diff --git a/libbb/obscure.c b/libbb/obscure.c index 9ac6bcd82..19b87523e 100644 --- a/libbb/obscure.c +++ b/libbb/obscure.c @@ -93,11 +93,11 @@ 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)) { @@ -108,12 +108,11 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc 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++) { @@ -130,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++; @@ -157,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; }