diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-27 22:21:12 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-27 22:21:12 +0000 |
commit | e06bed30cfcde7b9e320aff8a4c878c72416c4c4 (patch) | |
tree | da3276ab5bc224a64fb9f7d7d2a8a046816ec533 | |
parent | cd75a96f0f9d446028cad7e4b9b9224e009752e1 (diff) | |
download | busybox-w32-e06bed30cfcde7b9e320aff8a4c878c72416c4c4.tar.gz busybox-w32-e06bed30cfcde7b9e320aff8a4c878c72416c4c4.tar.bz2 busybox-w32-e06bed30cfcde7b9e320aff8a4c878c72416c4c4.zip |
use bb_sanitize_stdio() where appropriate
-rw-r--r-- | coreutils/nohup.c | 32 | ||||
-rw-r--r-- | libbb/xfuncs.c | 2 | ||||
-rw-r--r-- | loginutils/getty.c | 7 | ||||
-rw-r--r-- | networking/traceroute.c | 6 | ||||
-rw-r--r-- | networking/udhcp/common.c | 16 |
5 files changed, 27 insertions, 36 deletions
diff --git a/coreutils/nohup.c b/coreutils/nohup.c index 21adfc1c3..317d2a8ae 100644 --- a/coreutils/nohup.c +++ b/coreutils/nohup.c | |||
@@ -14,16 +14,18 @@ | |||
14 | 14 | ||
15 | int nohup_main(int argc, char **argv) | 15 | int nohup_main(int argc, char **argv) |
16 | { | 16 | { |
17 | int temp, nullfd; | 17 | int nullfd; |
18 | char *nohupout, *home = NULL; | 18 | const char *nohupout; |
19 | char *home = NULL; | ||
19 | 20 | ||
20 | xfunc_error_retval = 127; | 21 | xfunc_error_retval = 127; |
21 | 22 | ||
22 | if (argc<2) bb_show_usage(); | 23 | if (argc < 2) bb_show_usage(); |
23 | 24 | ||
24 | nullfd = xopen(bb_dev_null, O_WRONLY|O_APPEND); | 25 | nullfd = xopen(bb_dev_null, O_WRONLY|O_APPEND); |
25 | /* If stdin is a tty, detach from it. */ | 26 | /* If stdin is a tty, detach from it. */ |
26 | if (isatty(STDIN_FILENO)) dup2(nullfd, STDIN_FILENO); | 27 | if (isatty(STDIN_FILENO)) |
28 | dup2(nullfd, STDIN_FILENO); | ||
27 | 29 | ||
28 | nohupout = "nohup.out"; | 30 | nohupout = "nohup.out"; |
29 | /* Redirect stdout to nohup.out, either in "." or in "$HOME". */ | 31 | /* Redirect stdout to nohup.out, either in "." or in "$HOME". */ |
@@ -38,16 +40,20 @@ int nohup_main(int argc, char **argv) | |||
38 | } | 40 | } |
39 | } else dup2(nullfd, STDOUT_FILENO); | 41 | } else dup2(nullfd, STDOUT_FILENO); |
40 | 42 | ||
41 | /* If we have a tty on strderr, announce filename and redirect to stdout. | 43 | /* If we have a tty on stderr, announce filename and redirect to stdout. |
42 | * Else redirect to /dev/null. | 44 | * Else redirect to /dev/null. |
43 | */ | 45 | */ |
44 | temp = isatty(STDERR_FILENO); | 46 | if (isatty(STDERR_FILENO)) { |
45 | if (temp) bb_error_msg("appending to %s", nohupout); | 47 | bb_error_msg("appending to %s", nohupout); |
46 | dup2(temp ? STDOUT_FILENO : nullfd, STDERR_FILENO); | 48 | dup2(STDOUT_FILENO, STDERR_FILENO); |
47 | close(nullfd); | 49 | } else dup2(nullfd, STDERR_FILENO); |
48 | signal (SIGHUP, SIG_IGN); | 50 | |
49 | 51 | if (nullfd > 2) | |
50 | execvp(argv[1],argv+1); | 52 | close(nullfd); |
51 | if (00 && ENABLE_FEATURE_CLEAN_UP && home) free(nohupout); | 53 | signal(SIGHUP, SIG_IGN); |
54 | |||
55 | execvp(argv[1], argv+1); | ||
56 | if (ENABLE_FEATURE_CLEAN_UP && home) | ||
57 | free((char*)nohupout); | ||
52 | bb_perror_msg_and_die("%s", argv[1]); | 58 | bb_perror_msg_and_die("%s", argv[1]); |
53 | } | 59 | } |
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index f7300a6d9..54d291ab1 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
@@ -518,7 +518,7 @@ void bb_sanitize_stdio_maybe_daemonize(int daemonize) | |||
518 | int fd; | 518 | int fd; |
519 | /* Mega-paranoid */ | 519 | /* Mega-paranoid */ |
520 | fd = xopen(bb_dev_null, O_RDWR); | 520 | fd = xopen(bb_dev_null, O_RDWR); |
521 | while (fd < 2) | 521 | while ((unsigned)fd < 2) |
522 | fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ | 522 | fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ |
523 | if (daemonize) { | 523 | if (daemonize) { |
524 | pid_t pid = fork(); | 524 | pid_t pid = fork(); |
diff --git a/loginutils/getty.c b/loginutils/getty.c index be4938972..f2c2b4afb 100644 --- a/loginutils/getty.c +++ b/loginutils/getty.c | |||
@@ -264,7 +264,7 @@ static void open_tty(char *tty, struct termios *tp, int local) | |||
264 | */ | 264 | */ |
265 | 265 | ||
266 | if ((fcntl(0, F_GETFL, 0) & O_RDWR) != O_RDWR) | 266 | if ((fcntl(0, F_GETFL, 0) & O_RDWR) != O_RDWR) |
267 | bb_error_msg_and_die("%s: not open for read/write", tty); | 267 | bb_error_msg_and_die("stdin is not open for read/write"); |
268 | } | 268 | } |
269 | 269 | ||
270 | /* Replace current standard output/error fd's with new ones */ | 270 | /* Replace current standard output/error fd's with new ones */ |
@@ -314,7 +314,8 @@ static void open_tty(char *tty, struct termios *tp, int local) | |||
314 | strcpy(vcsa, "vcsa"); | 314 | strcpy(vcsa, "vcsa"); |
315 | strcpy(vcsa + 4, tty + 3); | 315 | strcpy(vcsa + 4, tty + 3); |
316 | 316 | ||
317 | id = (gr = getgrnam("sys")) ? gr->gr_gid : 0; | 317 | gr = getgrnam("sys"); |
318 | id = gr ? gr->gr_gid : 0; | ||
318 | chown(vcs, 0, id); | 319 | chown(vcs, 0, id); |
319 | chmod(vcs, 0600); | 320 | chmod(vcs, 0600); |
320 | chown(vcsa, 0, id); | 321 | chown(vcsa, 0, id); |
@@ -628,8 +629,8 @@ static void termios_final(struct options *op, struct termios *tp, struct chardat | |||
628 | tp->c_cflag |= CS7; | 629 | tp->c_cflag |= CS7; |
629 | break; | 630 | break; |
630 | } | 631 | } |
631 | /* Account for upper case without lower case. */ | ||
632 | 632 | ||
633 | /* Account for upper case without lower case. */ | ||
633 | #ifdef HANDLE_ALLCAPS | 634 | #ifdef HANDLE_ALLCAPS |
634 | if (cp->capslock) { | 635 | if (cp->capslock) { |
635 | tp->c_iflag |= IUCLC; | 636 | tp->c_iflag |= IUCLC; |
diff --git a/networking/traceroute.c b/networking/traceroute.c index 47775aa8a..25c6569bb 100644 --- a/networking/traceroute.c +++ b/networking/traceroute.c | |||
@@ -1040,10 +1040,8 @@ traceroute_main(int argc, char *argv[]) | |||
1040 | bb_show_usage(); | 1040 | bb_show_usage(); |
1041 | } | 1041 | } |
1042 | 1042 | ||
1043 | /* Insure the socket fds won't be 0, 1 or 2 */ | 1043 | /* Ensure the socket fds won't be 0, 1 or 2 */ |
1044 | do n = xopen(bb_dev_null, O_RDONLY); while (n < 2); | 1044 | bb_sanitize_stdio(); |
1045 | while (n > 2) | ||
1046 | close(n--); | ||
1047 | 1045 | ||
1048 | s = xsocket(AF_INET, SOCK_RAW, IPPROTO_ICMP); | 1046 | s = xsocket(AF_INET, SOCK_RAW, IPPROTO_ICMP); |
1049 | 1047 | ||
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c index 3e916f422..3704ba71a 100644 --- a/networking/udhcp/common.c +++ b/networking/udhcp/common.c | |||
@@ -22,20 +22,6 @@ long uptime(void) | |||
22 | return info.uptime; | 22 | return info.uptime; |
23 | } | 23 | } |
24 | 24 | ||
25 | /* | ||
26 | * This function makes sure our first socket calls | ||
27 | * aren't going to fd 1 (printf badness...) and are | ||
28 | * not later closed by daemon() | ||
29 | */ | ||
30 | static inline void sanitize_fds(void) | ||
31 | { | ||
32 | int fd = xopen(bb_dev_null, O_RDWR); | ||
33 | while (fd < 3) | ||
34 | fd = dup(fd); | ||
35 | close(fd); | ||
36 | } | ||
37 | |||
38 | |||
39 | void udhcp_background(const char *pidfile) | 25 | void udhcp_background(const char *pidfile) |
40 | { | 26 | { |
41 | #ifdef __uClinux__ | 27 | #ifdef __uClinux__ |
@@ -57,7 +43,7 @@ void udhcp_start_log_and_pid(const char *pidfile) | |||
57 | int pid_fd; | 43 | int pid_fd; |
58 | 44 | ||
59 | /* Make sure our syslog fd isn't overwritten */ | 45 | /* Make sure our syslog fd isn't overwritten */ |
60 | sanitize_fds(); | 46 | bb_sanitize_stdio(); |
61 | 47 | ||
62 | /* do some other misc startup stuff while we are here to save bytes */ | 48 | /* do some other misc startup stuff while we are here to save bytes */ |
63 | pid_fd = pidfile_acquire(pidfile); | 49 | pid_fd = pidfile_acquire(pidfile); |