summaryrefslogtreecommitdiffstats
path: root/src/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/exec.c')
-rw-r--r--src/exec.c19
1 files changed, 12 insertions, 7 deletions
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;
}
}