diff options
author | Denys Vlasenko | 2013-11-19 13:09:06 +0100 |
---|---|---|
committer | Denys Vlasenko | 2013-11-19 13:09:06 +0100 |
commit | 9c1c605b1a8f34aef347bd9c2e4aea251e556d1b (patch) | |
tree | 1854674f7025a8679bd42bd4f056d22a6df891a3 /libbb | |
parent | f6beef63c64abfc126ea4e73147af29d152f1a9e (diff) | |
download | busybox-9c1c605b1a8f34aef347bd9c2e4aea251e556d1b.zip busybox-9c1c605b1a8f34aef347bd9c2e4aea251e556d1b.tar.gz |
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 7cabd33..d02d0d6 100644 --- a/libbb/correct_password.c +++ b/libbb/correct_password.c @@ -31,12 +31,15 @@ #include "libbb.h" /* Ask the user for a password. + * Return 1 without asking if PW has an empty password. + * Return -1 on EOF, error while reading input, or timeout. * Return 1 if the user gives the correct password for entry PW, - * 0 if not. Return 1 without asking if PW has an empty password. + * 0 if not. * - * NULL pw means "just fake it for login with bad username" */ - -int FAST_FUNC correct_password(const struct passwd *pw) + * NULL pw means "just fake it for login with bad username" + */ +int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw, + int timeout, const char *prompt) { char *unencrypted, *encrypted; const char *correct; @@ -65,9 +68,10 @@ int FAST_FUNC correct_password(const struct passwd *pw) return 1; fake_it: - unencrypted = bb_ask_stdin("Password: "); + unencrypted = bb_ask(STDIN_FILENO, timeout, prompt); if (!unencrypted) { - return 0; + /* EOF (such as ^D) or error (such as ^C) */ + return -1; } encrypted = pw_encrypt(unencrypted, correct, 1); r = (strcmp(encrypted, correct) == 0); @@ -75,3 +79,8 @@ int FAST_FUNC correct_password(const struct passwd *pw) memset(unencrypted, 0, strlen(unencrypted)); return r; } + +int FAST_FUNC ask_and_check_password(const struct passwd *pw) +{ + return ask_and_check_password_extended(pw, 0, "Password: "); +} |