From 0f49ab0feab67aac4a399bbad58f5f230f625833 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 8 Nov 2014 19:07:46 +0100 Subject: inittab: clean up tty opening code, fix console shell job control issues Signed-off-by: Felix Fietkau --- inittab.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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); -- cgit v1.2.3