diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-19 21:19:35 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-19 21:19:35 +0000 |
commit | 9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e (patch) | |
tree | 69a650a8cd686f21087fc572a995420b6ac632cc /libbb | |
parent | f8c11aa65df2af4ab20c0effc42997bbd7357cc3 (diff) | |
download | busybox-w32-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.tar.gz busybox-w32-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.tar.bz2 busybox-w32-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.zip |
openvt,getty,vfork_daemon_rexec,mount: tighten up fd cleanup code
(will close all fd's > 2 on daemonization now)
getty: fix "getty -" support, and also do not try to chown/chmod "-"
telnetd: fix "lost ctty" bug
Yet another attempt on saner function names:
bb_sanitize_server_stdio(0/1) -> bb_sanitize_stdio() + bb_daemonize();
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/vfork_daemon_rexec.c | 4 | ||||
-rw-r--r-- | libbb/xfuncs.c | 12 |
2 files changed, 12 insertions, 4 deletions
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 81ae12687..26d1826e0 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c | |||
@@ -35,8 +35,8 @@ void vfork_daemon_rexec(int nochdir, int noclose, | |||
35 | dup2(fd, STDIN_FILENO); | 35 | dup2(fd, STDIN_FILENO); |
36 | dup2(fd, STDOUT_FILENO); | 36 | dup2(fd, STDOUT_FILENO); |
37 | dup2(fd, STDERR_FILENO); | 37 | dup2(fd, STDERR_FILENO); |
38 | if (fd > 2) | 38 | while (fd > 2) |
39 | close(fd); | 39 | close(fd--); |
40 | } | 40 | } |
41 | 41 | ||
42 | vfork_args = xzalloc(sizeof(char *) * (argc + 3)); | 42 | vfork_args = xzalloc(sizeof(char *) * (argc + 3)); |
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 84d47414a..dc160bf5c 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
@@ -509,7 +509,7 @@ void xdaemon(int nochdir, int noclose) | |||
509 | } | 509 | } |
510 | #endif | 510 | #endif |
511 | 511 | ||
512 | void bb_sanitize_server_stdio(int daemonize) | 512 | void bb_sanitize_stdio_maybe_daemonize(int daemonize) |
513 | { | 513 | { |
514 | int fd; | 514 | int fd; |
515 | /* Mega-paranoid */ | 515 | /* Mega-paranoid */ |
@@ -523,8 +523,8 @@ void bb_sanitize_server_stdio(int daemonize) | |||
523 | if (pid) /* parent */ | 523 | if (pid) /* parent */ |
524 | exit(0); | 524 | exit(0); |
525 | /* child */ | 525 | /* child */ |
526 | setsid(); | ||
527 | /* if daemonizing, make sure we detach from stdio */ | 526 | /* if daemonizing, make sure we detach from stdio */ |
527 | setsid(); | ||
528 | dup2(fd, 0); | 528 | dup2(fd, 0); |
529 | dup2(fd, 1); | 529 | dup2(fd, 1); |
530 | dup2(fd, 2); | 530 | dup2(fd, 2); |
@@ -532,6 +532,14 @@ void bb_sanitize_server_stdio(int daemonize) | |||
532 | while (fd > 2) | 532 | while (fd > 2) |
533 | close(fd--); /* close everything after fd#2 */ | 533 | close(fd--); /* close everything after fd#2 */ |
534 | } | 534 | } |
535 | void bb_sanitize_stdio(void) | ||
536 | { | ||
537 | bb_sanitize_stdio_maybe_daemonize(0); | ||
538 | } | ||
539 | void bb_daemonize(void) | ||
540 | { | ||
541 | bb_sanitize_stdio_maybe_daemonize(1); | ||
542 | } | ||
535 | 543 | ||
536 | // Die with an error message if we can't open a new socket. | 544 | // Die with an error message if we can't open a new socket. |
537 | int xsocket(int domain, int type, int protocol) | 545 | int xsocket(int domain, int type, int protocol) |