libbb: bb_do_delay(3) -> pause_after_failed_login(), and stop looping there
No binary (build failed)
—
(log yok)
| @@ -1604,9 +1604,10 @@ char *bb_simplify_abs_path_inplace(char *path) FAST_FUNC; | |
| #ifndef LOGIN_FAIL_DELAY | |
| #define LOGIN_FAIL_DELAY 3 | |
| #endif | |
| - | extern void bb_do_delay(int seconds) FAST_FUNC; |
| - | extern void change_identity(const struct passwd *pw) FAST_FUNC; |
| - | extern void run_shell(const char *shell, int loginshell, const char **args) NORETURN FAST_FUNC; |
| + | void pause_after_failed_login(void) FAST_FUNC; |
| + | void bb_do_delay(int seconds) FAST_FUNC; |
| + | void change_identity(const struct passwd *pw) FAST_FUNC; |
| + | void run_shell(const char *shell, int loginshell, const char **args) NORETURN FAST_FUNC; |
| /* Returns $SHELL, getpwuid(getuid())->pw_shell, or DEFAULT_SHELL. | |
| * Note that getpwuid result might need xstrdup'ing | |
| @@ -8,13 +8,23 @@ | |
| */ | |
| #include "libbb.h" | |
| - | void FAST_FUNC bb_do_delay(int seconds) |
| + | /* void FAST_FUNC bb_do_delay(int seconds) { ... } - no users yet */ |
| + | |
| + | #ifndef LOGIN_FAIL_DELAY |
| + | #define LOGIN_FAIL_DELAY 3 |
| + | #endif |
| + | void FAST_FUNC pause_after_failed_login(void) |
| { | |
| - | time_t start, now; |
| + | #if 0 /* over-engineered madness */ |
| + | time_t end, diff; |
| - | start = time(NULL); |
| + | end = time(NULL) + LOGIN_FAIL_DELAY; |
| + | diff = LOGIN_FAIL_DELAY; |
| do { | |
| - | sleep(seconds); |
| - | now = time(NULL); |
| - | } while ((now - start) < seconds); |
| + | sleep(diff); |
| + | diff = end - time(NULL); |
| + | } while (diff > 0); |
| + | #else |
| + | sleep(LOGIN_FAIL_DELAY); |
| + | #endif |
| } | |
| @@ -505,7 +505,7 @@ int login_main(int argc UNUSED_PARAM, char **argv) | |
| #endif /* ENABLE_PAM */ | |
| auth_failed: | |
| opt &= ~LOGIN_OPT_f; | |
| - | bb_do_delay(LOGIN_FAIL_DELAY); |
| + | pause_after_failed_login(); |
| /* TODO: doesn't sound like correct English phrase to me */ | |
| puts("Login incorrect"); | |
| if (++count == 3) { | |
| @@ -57,7 +57,7 @@ static char* new_password(const struct passwd *pw, uid_t myuid, const char *algo | |
| encrypted = pw_encrypt(orig, pw->pw_passwd, 1); /* returns malloced str */ | |
| if (strcmp(encrypted, pw->pw_passwd) != 0) { | |
| syslog(LOG_WARNING, "incorrect password for %s", pw->pw_name); | |
| - | bb_do_delay(LOGIN_FAIL_DELAY); |
| + | pause_after_failed_login(); |
| puts("Incorrect password"); | |
| goto err_ret; | |
| } | |
| @@ -146,7 +146,7 @@ int su_main(int argc UNUSED_PARAM, char **argv) | |
| if (ENABLE_FEATURE_SU_SYSLOG) | |
| syslog(LOG_NOTICE, "%c %s %s:%s", | |
| '-', tty, old_user, opt_username); | |
| - | bb_do_delay(LOGIN_FAIL_DELAY); |
| + | pause_after_failed_login(); |
| bb_simple_error_msg_and_die("incorrect password"); | |
| } | |
| @@ -74,7 +74,7 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv) | |
| if (r > 0) { | |
| break; | |
| } | |
| - | bb_do_delay(LOGIN_FAIL_DELAY); |
| + | pause_after_failed_login(); |
| bb_simple_info_msg("Login incorrect"); | |
| } | |
| @@ -120,7 +120,7 @@ int vlock_main(int argc UNUSED_PARAM, char **argv) | |
| if (ask_and_check_password(pw) > 0) { | |
| break; | |
| } | |
| - | bb_do_delay(LOGIN_FAIL_DELAY); |
| + | pause_after_failed_login(); |
| puts("Incorrect password"); | |
| } | |
| @@ -139,7 +139,7 @@ int pscan_main(int argc UNUSED_PARAM, char **argv) | |
| * We check rtt BEFORE we usleep, otherwise | |
| * on localhost we'll have no writes done (!) | |
| * before we exceed (rather small) rtt */ | |
| - | usleep(rtt_4/8); |
| + | usleep(rtt_4 / 8); |
| open: | |
| diff = MONOTONIC_US() - start; | |
| DMSG("write to port %u @%u", port, diff - start); | |