patch from tito: consolidate delay functions as bb_do_delay()

This commit is contained in:
Rob Landley 2006-01-06 20:59:09 +00:00
parent 251161f75c
commit 84cb76733f
7 changed files with 38 additions and 28 deletions

View File

@ -355,7 +355,7 @@ extern const char * const bb_default_login_shell;
#define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6) #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; 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))); char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
#define FAIL_DELAY 3 #define FAIL_DELAY 3
extern void bb_do_delay(int seconds);
extern void change_identity ( const struct passwd *pw ); extern void change_identity ( const struct passwd *pw );
extern const char *change_identity_e2str ( 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); extern void run_shell ( const char *shell, int loginshell, const char *command, const char **additional_args);

View File

@ -34,7 +34,7 @@ LIBBB_SRC-y:= \
getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \ 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 \ 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 \ 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 LIBBB_SRC-$(CONFIG_FEATURE_SHADOWPASSWDS)+= pwd2spwd.c

31
libbb/bb_do_delay.c Normal file
View File

@ -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:
*/

View File

@ -198,17 +198,7 @@ auth_ok:
if ( !failed) if ( !failed)
break; break;
{ // delay next try bb_do_delay(FAIL_DELAY);
time_t start, now;
time ( &start );
now = start;
while ( difftime ( now, start ) < FAIL_DELAY) {
sleep ( FAIL_DELAY );
time ( &now );
}
}
puts("Login incorrect"); puts("Login incorrect");
username[0] = 0; username[0] = 0;
if ( ++count == 3 ) { if ( ++count == 3 ) {

View File

@ -323,7 +323,6 @@ static int new_password(const struct passwd *pw, int amroot, int algo)
char *cp; char *cp;
char orig[200]; char orig[200];
char pass[200]; char pass[200];
time_t start, now;
if (!amroot && crypt_passwd[0]) { if (!amroot && crypt_passwd[0]) {
if (!(clear = bb_askpass(0, "Old password:"))) { 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) { if (strcmp(cipher, crypt_passwd) != 0) {
syslog(LOG_WARNING, "incorrect password for `%s'", syslog(LOG_WARNING, "incorrect password for `%s'",
pw->pw_name); pw->pw_name);
time(&start); bb_do_delay(FAIL_DELAY);
now = start;
while (difftime(now, start) < FAIL_DELAY) {
sleep(FAIL_DELAY);
time(&now);
}
fprintf(stderr, "Incorrect password.\n"); fprintf(stderr, "Incorrect password.\n");
/* return -1; */ /* return -1; */
return 1; return 1;

View File

@ -58,7 +58,6 @@ extern int sulogin_main(int argc, char **argv)
struct passwd pwent; struct passwd pwent;
struct passwd *pwd; struct passwd *pwd;
time_t start, now;
const char * const *p; const char * const *p;
#ifdef CONFIG_FEATURE_SHADOWPASSWDS #ifdef CONFIG_FEATURE_SHADOWPASSWDS
struct spwd *spwd = NULL; 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) { if (strcmp(pw_encrypt(pass, pwent.pw_passwd), pwent.pw_passwd) == 0) {
break; break;
} }
time(&start); bb_do_delay(FAIL_DELAY);
now = start;
while (difftime(now, start) < FAIL_DELAY) {
sleep(FAIL_DELAY);
time(&now);
}
puts("Login incorrect"); puts("Login incorrect");
fflush(stdout); fflush(stdout);
syslog(LOG_WARNING, "Incorrect root password\n"); syslog(LOG_WARNING, "Incorrect root password\n");

View File

@ -135,7 +135,7 @@ extern int vlock_main(int argc, char **argv)
if (correct_password (pw)) { if (correct_password (pw)) {
break; break;
} }
sleep(10); bb_do_delay(FAIL_DELAY);
puts("Password incorrect."); puts("Password incorrect.");
} while (1); } while (1);
restore_terminal(); restore_terminal();