summaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenis Vlasenko2007-01-19 21:19:35 +0000
committerDenis Vlasenko2007-01-19 21:19:35 +0000
commit9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e (patch)
tree69a650a8cd686f21087fc572a995420b6ac632cc /libbb
parentf8c11aa65df2af4ab20c0effc42997bbd7357cc3 (diff)
downloadbusybox-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.zip
busybox-9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e.tar.gz
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.c4
-rw-r--r--libbb/xfuncs.c12
2 files changed, 12 insertions, 4 deletions
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c
index 81ae126..26d1826 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,
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
- if (fd > 2)
- close(fd);
+ while (fd > 2)
+ close(fd--);
}
vfork_args = xzalloc(sizeof(char *) * (argc + 3));
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index 84d4741..dc160bf 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -509,7 +509,7 @@ void xdaemon(int nochdir, int noclose)
}
#endif
-void bb_sanitize_server_stdio(int daemonize)
+void bb_sanitize_stdio_maybe_daemonize(int daemonize)
{
int fd;
/* Mega-paranoid */
@@ -523,8 +523,8 @@ void bb_sanitize_server_stdio(int daemonize)
if (pid) /* parent */
exit(0);
/* child */
- setsid();
/* if daemonizing, make sure we detach from stdio */
+ setsid();
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
@@ -532,6 +532,14 @@ void bb_sanitize_server_stdio(int daemonize)
while (fd > 2)
close(fd--); /* close everything after fd#2 */
}
+void bb_sanitize_stdio(void)
+{
+ bb_sanitize_stdio_maybe_daemonize(0);
+}
+void bb_daemonize(void)
+{
+ bb_sanitize_stdio_maybe_daemonize(1);
+}
// Die with an error message if we can't open a new socket.
int xsocket(int domain, int type, int protocol)