From: Felix Fietkau Date: Sat, 8 Nov 2014 18:07:46 +0000 (+0100) Subject: inittab: clean up tty opening code, fix console shell job control issues X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0f49ab0feab67aac4a399bbad58f5f230f625833;p=oweals%2Fprocd.git inittab: clean up tty opening code, fix console shell job control issues Signed-off-by: Felix Fietkau --- diff --git a/inittab.c b/inittab.c index be18482..2efbf4d 100644 --- a/inittab.c +++ b/inittab.c @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -96,16 +97,25 @@ static void fork_worker(struct init_action *a) a->proc.pid = fork(); if (!a->proc.pid) { - p = setsid( ); + p = setsid(); + + close(STDIN_FILENO); + close(STDOUT_FILENO); + close(STDERR_FILENO); + fd = dev_open(a->id); if (fd != -1) { dup2(fd, STDIN_FILENO); dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); - tcsetpgrp(fd, p); - close(fd); + if (fd > STDERR_FILENO) + close(fd); } + + ioctl(STDIN_FILENO, TIOCSCTTY, 1); + tcsetpgrp(STDIN_FILENO, p); + execvp(a->argv[0], a->argv); ERROR("Failed to execute %s\n", a->argv[0]); exit(-1);