From 391d8de6222c87d423622265d02a224ea9d353ef Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Thu, 28 Feb 2008 21:26:53 +0000 Subject: close fd doesn't seem good enough - whereas fcntl does the job. --- src/rc/runscript.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/rc') diff --git a/src/rc/runscript.c b/src/rc/runscript.c index eb1f9904..33f814d3 100644 --- a/src/rc/runscript.c +++ b/src/rc/runscript.c @@ -425,6 +425,14 @@ static bool svc_exec (const char *arg1, const char *arg2) /* If the below call fails due to not enough ptys then we don't * prefix the output, but we still work */ openpty (&master_tty, &slave_tty, NULL, &tt, &ws); + + if (master_tty >= 0 && + (flags = fcntl (master_tty, F_GETFD, 0)) == 0) + fcntl (master_tty, F_SETFD, flags | FD_CLOEXEC); + + if (slave_tty >=0 && + (flags = fcntl (slave_tty, F_GETFD, 0)) == 0) + fcntl (slave_tty, F_SETFD, flags | FD_CLOEXEC); } service_pid = fork(); @@ -432,12 +440,8 @@ static bool svc_exec (const char *arg1, const char *arg2) eerrorx ("%s: fork: %s", service, strerror (errno)); if (service_pid == 0) { if (slave_tty >= 0) { - close (master_tty); - dup2 (slave_tty, 1); dup2 (slave_tty, 2); - if (slave_tty > 2) - close (slave_tty); } if (exists (RC_SVCDIR "/runscript.sh")) { -- cgit v1.2.3