diff options
-rw-r--r-- | include/libbb.h | 3 | ||||
-rw-r--r-- | libbb/Makefile.in | 2 | ||||
-rw-r--r-- | libbb/bb_do_delay.c | 31 | ||||
-rw-r--r-- | loginutils/login.c | 12 | ||||
-rw-r--r-- | loginutils/passwd.c | 8 | ||||
-rw-r--r-- | loginutils/sulogin.c | 8 | ||||
-rw-r--r-- | loginutils/vlock.c | 2 |
7 files changed, 38 insertions, 28 deletions
diff --git a/include/libbb.h b/include/libbb.h index 52d91c826..f6efc40df 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -355,7 +355,7 @@ extern const char * const bb_default_login_shell; #define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6) -extern const char bb_path_mtab_file[]; +extern char bb_path_mtab_file[]; extern int bb_default_error_retval; @@ -419,6 +419,7 @@ extern size_t bb_strlen(const char *string); char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); #define FAIL_DELAY 3 +extern void bb_do_delay(int seconds); extern void change_identity ( const struct passwd *pw ); extern const char *change_identity_e2str ( const struct passwd *pw ); extern void run_shell ( const char *shell, int loginshell, const char *command, const char **additional_args); diff --git a/libbb/Makefile.in b/libbb/Makefile.in index 35541231b..91698a919 100644 --- a/libbb/Makefile.in +++ b/libbb/Makefile.in @@ -34,7 +34,7 @@ LIBBB_SRC-y:= \ getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \ perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \ warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \ - bb_echo.c + bb_echo.c bb_do_delay.c LIBBB_SRC-$(CONFIG_FEATURE_SHADOWPASSWDS)+= pwd2spwd.c diff --git a/libbb/bb_do_delay.c b/libbb/bb_do_delay.c new file mode 100644 index 000000000..ddcff0765 --- /dev/null +++ b/libbb/bb_do_delay.c @@ -0,0 +1,31 @@ +/* vi: set sw=4 ts=4: */ +/* + * Busybox utility routines. + * + * Copyright (C) 2005 by Tito Ragusa <tito-wolit@tiscali.it> + * + * Licensed under the GPL v2, see the file LICENSE in this tarball. + */ + +#include <time.h> +#include <unistd.h> + +void bb_do_delay(int seconds) +{ + time_t start, now; + + time(&start); + now = start; + while (difftime(now, start) < seconds) { + sleep(seconds); + time(&now); + } +} + +/* +Local Variables: +c-file-style: "linux" +c-basic-offset: 4 +tab-width: 4 +End: +*/ diff --git a/loginutils/login.c b/loginutils/login.c index 6632a7665..21e807615 100644 --- a/loginutils/login.c +++ b/loginutils/login.c @@ -198,17 +198,7 @@ auth_ok: if ( !failed) break; - { // delay next try - time_t start, now; - - time ( &start ); - now = start; - while ( difftime ( now, start ) < FAIL_DELAY) { - sleep ( FAIL_DELAY ); - time ( &now ); - } - } - + bb_do_delay(FAIL_DELAY); puts("Login incorrect"); username[0] = 0; if ( ++count == 3 ) { diff --git a/loginutils/passwd.c b/loginutils/passwd.c index 5d8380d4c..b60b8973e 100644 --- a/loginutils/passwd.c +++ b/loginutils/passwd.c @@ -323,7 +323,6 @@ static int new_password(const struct passwd *pw, int amroot, int algo) char *cp; char orig[200]; char pass[200]; - time_t start, now; if (!amroot && crypt_passwd[0]) { if (!(clear = bb_askpass(0, "Old password:"))) { @@ -334,12 +333,7 @@ static int new_password(const struct passwd *pw, int amroot, int algo) if (strcmp(cipher, crypt_passwd) != 0) { syslog(LOG_WARNING, "incorrect password for `%s'", pw->pw_name); - time(&start); - now = start; - while (difftime(now, start) < FAIL_DELAY) { - sleep(FAIL_DELAY); - time(&now); - } + bb_do_delay(FAIL_DELAY); fprintf(stderr, "Incorrect password.\n"); /* return -1; */ return 1; diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c index 4e689ad68..f54939eef 100644 --- a/loginutils/sulogin.c +++ b/loginutils/sulogin.c @@ -58,7 +58,6 @@ extern int sulogin_main(int argc, char **argv) struct passwd pwent; struct passwd *pwd; - time_t start, now; const char * const *p; #ifdef CONFIG_FEATURE_SHADOWPASSWDS struct spwd *spwd = NULL; @@ -140,12 +139,7 @@ extern int sulogin_main(int argc, char **argv) if (strcmp(pw_encrypt(pass, pwent.pw_passwd), pwent.pw_passwd) == 0) { break; } - time(&start); - now = start; - while (difftime(now, start) < FAIL_DELAY) { - sleep(FAIL_DELAY); - time(&now); - } + bb_do_delay(FAIL_DELAY); puts("Login incorrect"); fflush(stdout); syslog(LOG_WARNING, "Incorrect root password\n"); diff --git a/loginutils/vlock.c b/loginutils/vlock.c index 141767c93..0975b5156 100644 --- a/loginutils/vlock.c +++ b/loginutils/vlock.c @@ -135,7 +135,7 @@ extern int vlock_main(int argc, char **argv) if (correct_password (pw)) { break; } - sleep(10); + bb_do_delay(FAIL_DELAY); puts("Password incorrect."); } while (1); restore_terminal(); |