diff options
author | Lennart Poettering <lennart@poettering.net> | 2003-11-05 22:04:26 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2003-11-05 22:04:26 +0000 |
commit | f3f63715dc41288b4bd6bcf346d7429c650ed5d2 (patch) | |
tree | 2eb2489567423bebbd522dae8a3f3f3e637497eb /src/exec.c | |
parent | b299a344ced3a974d74e92da824180052d4c3360 (diff) |
exec fixes
git-svn-id: file:///home/lennart/svn/public/waproamd/trunk@31 022f378f-78c4-0310-b860-d162c87e6274
Diffstat (limited to 'src/exec.c')
-rw-r--r-- | src/exec.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -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; } } |