← Commit list

84cb76733

Rob Landley
Rob Landley
2006-01-06
SOURCE BUG Duration: 11s

Subject

patch from tito: consolidate delay functions as bb_do_delay()

SOURCE BUG

This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)

→ Bu hatanin tam hikayesini ve duzeltme diffini gor

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

include/libbb.h+2 -1
@@ -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);
libbb/Makefile.in+1 -1
@@ -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
libbb/bb_do_delay.c+31 -0
@@ -0,0 +1,31 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Busybox utility routines.
+ *
+ * Copyright (C) 2005 by Tito Ragusa <[email protected]>
+ *
+ * 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:
+*/
loginutils/login.c+1 -11
@@ -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 ) {
loginutils/passwd.c+1 -7
@@ -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;
loginutils/sulogin.c+1 -7
@@ -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");
loginutils/vlock.c+1 -1
@@ -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();