summaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
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)