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>
This commit is contained in:
Denys Vlasenko
2013-11-19 13:09:06 +01:00
parent f6beef63c6
commit 9c1c605b1a
6 changed files with 26 additions and 47 deletions

View File

@ -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: ");
}