use bb_sanitize_stdio() where appropriate
No binary (build failed)
—
(log yok)
| @@ -14,16 +14,18 @@ | |
| int nohup_main(int argc, char **argv) | |
| { | |
| - | int temp, nullfd; |
| - | char *nohupout, *home = NULL; |
| + | int nullfd; |
| + | const char *nohupout; |
| + | char *home = NULL; |
| xfunc_error_retval = 127; | |
| - | if (argc<2) bb_show_usage(); |
| + | if (argc < 2) bb_show_usage(); |
| nullfd = xopen(bb_dev_null, O_WRONLY|O_APPEND); | |
| /* If stdin is a tty, detach from it. */ | |
| - | if (isatty(STDIN_FILENO)) dup2(nullfd, STDIN_FILENO); |
| + | if (isatty(STDIN_FILENO)) |
| + | dup2(nullfd, STDIN_FILENO); |
| nohupout = "nohup.out"; | |
| /* Redirect stdout to nohup.out, either in "." or in "$HOME". */ | |
| @@ -38,16 +40,20 @@ int nohup_main(int argc, char **argv) | |
| } | |
| } else dup2(nullfd, STDOUT_FILENO); | |
| - | /* If we have a tty on strderr, announce filename and redirect to stdout. |
| + | /* If we have a tty on stderr, announce filename and redirect to stdout. |
| * Else redirect to /dev/null. | |
| */ | |
| - | temp = isatty(STDERR_FILENO); |
| - | if (temp) bb_error_msg("appending to %s", nohupout); |
| - | dup2(temp ? STDOUT_FILENO : nullfd, STDERR_FILENO); |
| - | close(nullfd); |
| - | signal (SIGHUP, SIG_IGN); |
| - | |
| - | execvp(argv[1],argv+1); |
| - | if (00 && ENABLE_FEATURE_CLEAN_UP && home) free(nohupout); |
| + | if (isatty(STDERR_FILENO)) { |
| + | bb_error_msg("appending to %s", nohupout); |
| + | dup2(STDOUT_FILENO, STDERR_FILENO); |
| + | } else dup2(nullfd, STDERR_FILENO); |
| + | |
| + | if (nullfd > 2) |
| + | close(nullfd); |
| + | signal(SIGHUP, SIG_IGN); |
| + | |
| + | execvp(argv[1], argv+1); |
| + | if (ENABLE_FEATURE_CLEAN_UP && home) |
| + | free((char*)nohupout); |
| bb_perror_msg_and_die("%s", argv[1]); | |
| } | |
| @@ -518,7 +518,7 @@ void bb_sanitize_stdio_maybe_daemonize(int daemonize) | |
| int fd; | |
| /* Mega-paranoid */ | |
| fd = xopen(bb_dev_null, O_RDWR); | |
| - | while (fd < 2) |
| + | while ((unsigned)fd < 2) |
| fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ | |
| if (daemonize) { | |
| pid_t pid = fork(); | |
| @@ -264,7 +264,7 @@ static void open_tty(char *tty, struct termios *tp, int local) | |
| */ | |
| if ((fcntl(0, F_GETFL, 0) & O_RDWR) != O_RDWR) | |
| - | bb_error_msg_and_die("%s: not open for read/write", tty); |
| + | bb_error_msg_and_die("stdin is not open for read/write"); |
| } | |
| /* 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) | |
| strcpy(vcsa, "vcsa"); | |
| strcpy(vcsa + 4, tty + 3); | |
| - | id = (gr = getgrnam("sys")) ? gr->gr_gid : 0; |
| + | gr = getgrnam("sys"); |
| + | id = gr ? gr->gr_gid : 0; |
| chown(vcs, 0, id); | |
| chmod(vcs, 0600); | |
| chown(vcsa, 0, id); | |
| @@ -628,8 +629,8 @@ static void termios_final(struct options *op, struct termios *tp, struct chardat | |
| tp->c_cflag |= CS7; | |
| break; | |
| } | |
| - | /* Account for upper case without lower case. */ |
| + | /* Account for upper case without lower case. */ |
| #ifdef HANDLE_ALLCAPS | |
| if (cp->capslock) { | |
| tp->c_iflag |= IUCLC; | |
| @@ -1040,10 +1040,8 @@ traceroute_main(int argc, char *argv[]) | |
| bb_show_usage(); | |
| } | |
| - | /* Insure the socket fds won't be 0, 1 or 2 */ |
| - | do n = xopen(bb_dev_null, O_RDONLY); while (n < 2); |
| - | while (n > 2) |
| - | close(n--); |
| + | /* Ensure the socket fds won't be 0, 1 or 2 */ |
| + | bb_sanitize_stdio(); |
| s = xsocket(AF_INET, SOCK_RAW, IPPROTO_ICMP); | |
| @@ -22,20 +22,6 @@ long uptime(void) | |
| return info.uptime; | |
| } | |
| - | /* |
| - | * This function makes sure our first socket calls |
| - | * aren't going to fd 1 (printf badness...) and are |
| - | * not later closed by daemon() |
| - | */ |
| - | static inline void sanitize_fds(void) |
| - | { |
| - | int fd = xopen(bb_dev_null, O_RDWR); |
| - | while (fd < 3) |
| - | fd = dup(fd); |
| - | close(fd); |
| - | } |
| - | |
| - | |
| void udhcp_background(const char *pidfile) | |
| { | |
| #ifdef __uClinux__ | |
| @@ -57,7 +43,7 @@ void udhcp_start_log_and_pid(const char *pidfile) | |
| int pid_fd; | |
| /* Make sure our syslog fd isn't overwritten */ | |
| - | sanitize_fds(); |
| + | bb_sanitize_stdio(); |
| /* do some other misc startup stuff while we are here to save bytes */ | |
| pid_fd = pidfile_acquire(pidfile); | |