diff options
| author | Roy Marples <roy@marples.name> | 2008-02-28 21:26:53 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2008-02-28 21:26:53 +0000 | 
| commit | 391d8de6222c87d423622265d02a224ea9d353ef (patch) | |
| tree | e4b30f9a90a8ea168c1d807d3ffde2838cbdb7d3 | |
| parent | 15fd2f3accbdfe06cf970aed15effc4992725054 (diff) | |
| download | openrc-391d8de6222c87d423622265d02a224ea9d353ef.tar.xz | |
close fd doesn't seem good enough - whereas fcntl does the job.
| -rw-r--r-- | src/rc/runscript.c | 12 | 
1 files changed, 8 insertions, 4 deletions
| 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")) { | 
