From f3f63715dc41288b4bd6bcf346d7429c650ed5d2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 5 Nov 2003 22:04:26 +0000 Subject: exec fixes git-svn-id: file:///home/lennart/svn/public/waproamd/trunk@31 022f378f-78c4-0310-b860-d162c87e6274 --- src/exec.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/exec.c') diff --git a/src/exec.c b/src/exec.c index f2a37ef..80b60ec 100644 --- a/src/exec.c +++ b/src/exec.c @@ -55,8 +55,12 @@ int log_exec(const char *dir, const char *prog, const char *arg) { return -1; } else if (pid == 0) { - dup2(p[1], 1); - dup2(p[1], 2); + + if (p[1] != 1) + dup2(p[1], 1); + + if (p[1] != 2) + dup2(p[1], 2); if (p[0] > 2) close(p[0]); @@ -65,16 +69,19 @@ int log_exec(const char *dir, const char *prog, const char *arg) { close(p[1]); close(0); - open("/dev/null", O_RDONLY); + if (open("/dev/null", O_RDONLY) != 0) { + daemon_log(LOG_ERR, "Unable to open /dev/null as STDIN"); + _exit(EXIT_FAILURE); + } - umask(0022); // Set up a sane umask + umask(0022); /* Set up a sane umask */ if (dir && chdir(dir) < 0) { daemon_log(LOG_WARNING, "Failed to change to directory '%s'", dir); chdir("/"); } - execl(prog, prog, arg, 0); + execl(prog, prog, arg, (char*) 0); daemon_log(LOG_ERR, "execl(%s) failed: %s\n", prog, strerror(errno)); @@ -134,8 +141,6 @@ int log_exec(const char *dir, const char *prog, const char *arg) { daemon_log(LOG_WARNING, "Killing child."); kill(pid, SIGTERM); } - - break; } } -- cgit