summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-02-28 21:26:53 +0000
committerRoy Marples <roy@marples.name>2008-02-28 21:26:53 +0000
commit391d8de6222c87d423622265d02a224ea9d353ef (patch)
treee4b30f9a90a8ea168c1d807d3ffde2838cbdb7d3
parent15fd2f3accbdfe06cf970aed15effc4992725054 (diff)
downloadopenrc-391d8de6222c87d423622265d02a224ea9d353ef.tar.gz
openrc-391d8de6222c87d423622265d02a224ea9d353ef.tar.bz2
openrc-391d8de6222c87d423622265d02a224ea9d353ef.tar.xz
close fd doesn't seem good enough - whereas fcntl does the job.
-rw-r--r--src/rc/runscript.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/rc/runscript.c b/src/rc/runscript.c
index eb1f990..33f814d 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")) {