aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2013-11-19 13:09:06 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2013-11-19 13:09:06 +0100
commit9c1c605b1a8f34aef347bd9c2e4aea251e556d1b (patch)
tree1854674f7025a8679bd42bd4f056d22a6df891a3 /libbb
parentf6beef63c64abfc126ea4e73147af29d152f1a9e (diff)
downloadbusybox-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.c21
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 */
39int FAST_FUNC correct_password(const struct passwd *pw) 41int 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
83int FAST_FUNC ask_and_check_password(const struct passwd *pw)
84{
85 return ask_and_check_password_extended(pw, 0, "Password: ");
86}