diff options
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/correct_password.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/libbb/correct_password.c b/libbb/correct_password.c index 7cabd33d0..d02d0d6a0 100644 --- a/libbb/correct_password.c +++ b/libbb/correct_password.c | |||
@@ -31,12 +31,15 @@ | |||
31 | #include "libbb.h" | 31 | #include "libbb.h" |
32 | 32 | ||
33 | /* Ask the user for a password. | 33 | /* Ask the user for a password. |
34 | * Return 1 without asking if PW has an empty password. | ||
35 | * Return -1 on EOF, error while reading input, or timeout. | ||
34 | * Return 1 if the user gives the correct password for entry PW, | 36 | * Return 1 if the user gives the correct password for entry PW, |
35 | * 0 if not. Return 1 without asking if PW has an empty password. | 37 | * 0 if not. |
36 | * | 38 | * |
37 | * NULL pw means "just fake it for login with bad username" */ | 39 | * NULL pw means "just fake it for login with bad username" |
38 | 40 | */ | |
39 | int FAST_FUNC correct_password(const struct passwd *pw) | 41 | int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw, |
42 | int timeout, const char *prompt) | ||
40 | { | 43 | { |
41 | char *unencrypted, *encrypted; | 44 | char *unencrypted, *encrypted; |
42 | const char *correct; | 45 | const char *correct; |
@@ -65,9 +68,10 @@ int FAST_FUNC correct_password(const struct passwd *pw) | |||
65 | return 1; | 68 | return 1; |
66 | 69 | ||
67 | fake_it: | 70 | fake_it: |
68 | unencrypted = bb_ask_stdin("Password: "); | 71 | unencrypted = bb_ask(STDIN_FILENO, timeout, prompt); |
69 | if (!unencrypted) { | 72 | if (!unencrypted) { |
70 | return 0; | 73 | /* EOF (such as ^D) or error (such as ^C) */ |
74 | return -1; | ||
71 | } | 75 | } |
72 | encrypted = pw_encrypt(unencrypted, correct, 1); | 76 | encrypted = pw_encrypt(unencrypted, correct, 1); |
73 | r = (strcmp(encrypted, correct) == 0); | 77 | r = (strcmp(encrypted, correct) == 0); |
@@ -75,3 +79,8 @@ int FAST_FUNC correct_password(const struct passwd *pw) | |||
75 | memset(unencrypted, 0, strlen(unencrypted)); | 79 | memset(unencrypted, 0, strlen(unencrypted)); |
76 | return r; | 80 | return r; |
77 | } | 81 | } |
82 | |||
83 | int FAST_FUNC ask_and_check_password(const struct passwd *pw) | ||
84 | { | ||
85 | return ask_and_check_password_extended(pw, 0, "Password: "); | ||
86 | } | ||