From: Markus Gothe Date: Mon, 28 Aug 2023 14:12:01 +0000 (+0000) Subject: service: Fix retriggering of init.d-scripts. X-Git-Url: http://git.openwrt.org/openwrt/docs.git?a=commitdiff_plain;h=d852f877920b35f4188dde752e94edb43be596cb;p=project%2Fprocd.git service: Fix retriggering of init.d-scripts. Fix retriggering of init.d-scripts which calls commands dependent on functional STDIN/STDOUT/STDERR. If we just close these file descriptors those commands will not work as expected leading to unwanted consequences. If we instead redirect the file descriptors to /dev/null, we will end up the same end-result and these commands will work as expected. Signed-off-by: Markus Gothe Signed-off-by: Felix Fietkau [refactor] --- diff --git a/service/trigger.c b/service/trigger.c index 4af1474..86cbc0f 100644 --- a/service/trigger.c +++ b/service/trigger.c @@ -105,6 +105,7 @@ static void trigger_command_run(struct runqueue *q, struct runqueue_task *t) pid_t pid; int n = 0; int rem; + int fd; pid = fork(); if (pid < 0) { @@ -117,10 +118,12 @@ static void trigger_command_run(struct runqueue *q, struct runqueue_task *t) return; } - if (debug < 3) { - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); + if (debug < 3 && (fd = open("/dev/null", O_RDWR)) >= 0) { + dup2(fd, STDIN_FILENO); + dup2(fd, STDOUT_FILENO); + dup2(fd, STDERR_FILENO); + if (fd > STDERR_FILENO) + close(fd); } blobmsg_for_each_attr(cur, cmd->data, rem)