diff options
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/correct_password.c | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/libbb/correct_password.c b/libbb/correct_password.c index 527b3100b..fd7e0b56c 100644 --- a/libbb/correct_password.c +++ b/libbb/correct_password.c @@ -28,50 +28,38 @@ * SUCH DAMAGE. */ -#include <stdio.h> -#include <errno.h> -#include <unistd.h> -#include <string.h> -#include <stdlib.h> -#include <syslog.h> -#include <ctype.h> -#include <crypt.h> - #include "libbb.h" - - /* Ask the user for a password. Return 1 if the user gives the correct password for entry PW, 0 if not. Return 1 without asking for a password if run by UID 0 or if PW has an empty password. */ -int correct_password ( const struct passwd *pw ) +int correct_password(const struct passwd *pw) { char *unencrypted, *encrypted, *correct; #ifdef CONFIG_FEATURE_SHADOWPASSWDS - if (( strcmp ( pw-> pw_passwd, "x" ) == 0 ) || ( strcmp ( pw-> pw_passwd, "*" ) == 0 )) { - struct spwd *sp = getspnam ( pw-> pw_name ); + if (!strcmp(pw->pw_passwd, "x") || !strcmp(pw->pw_passwd, "*")) { + struct spwd *sp = getspnam(pw->pw_name); - if ( !sp ) - bb_error_msg_and_die ( "\nno valid shadow password" ); + if (!sp) + bb_error_msg_and_die("no valid shadow password"); - correct = sp-> sp_pwdp; + correct = sp->sp_pwdp; } else #endif - correct = pw-> pw_passwd; + correct = pw->pw_passwd; - if ( correct == 0 || correct[0] == '\0' ) + if (!correct || correct[0] == '\0') return 1; - unencrypted = bb_askpass ( 0, "Password: " ); - if ( !unencrypted ) - { + unencrypted = bb_askpass(0, "Password: "); + if (!unencrypted) { return 0; } - encrypted = crypt ( unencrypted, correct ); - memset ( unencrypted, 0, strlen ( unencrypted )); - return ( strcmp ( encrypted, correct ) == 0 ) ? 1 : 0; + encrypted = crypt(unencrypted, correct); + memset(unencrypted, 0, strlen(unencrypted)); + return (!strcmp(encrypted, correct)) ? 1 : 0; } |