diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2013-11-19 13:09:06 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2013-11-19 13:09:06 +0100 |
commit | 9c1c605b1a8f34aef347bd9c2e4aea251e556d1b (patch) | |
tree | 1854674f7025a8679bd42bd4f056d22a6df891a3 /libbb | |
parent | f6beef63c64abfc126ea4e73147af29d152f1a9e (diff) | |
download | busybox-w32-9c1c605b1a8f34aef347bd9c2e4aea251e556d1b.tar.gz busybox-w32-9c1c605b1a8f34aef347bd9c2e4aea251e556d1b.tar.bz2 busybox-w32-9c1c605b1a8f34aef347bd9c2e4aea251e556d1b.zip |
sulogin: use common password-checking routine.
This needed some extensions correct_passwd() function,
which got renamed ask_and_check_password() to better describe what it does.
function old new delta
ask_and_check_password_extended - 215 +215
ask_and_check_password - 12 +12
vlock_main 394 397 +3
sulogin_main 494 326 -168
correct_password 207 - -207
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 1/1 up/down: 230/-375) Total: -145 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
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 | } | ||