aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/process.c12
-rw-r--r--src/testd.c1
2 files changed, 13 insertions, 0 deletions
diff --git a/src/process.c b/src/process.c
index b320051f..ce0d459d 100644
--- a/src/process.c
+++ b/src/process.c
@@ -71,6 +71,8 @@ int forkCommand(char **args, int *outfd, int *errfd, int *cmdfd, int quiet) {
return pid;
} else {
/* kid */
+ int sc_open_max;
+
if (outfd) {
if ( (dup2(fdout,1)==-1) ) {
perror("dup2");
@@ -107,6 +109,16 @@ int forkCommand(char **args, int *outfd, int *errfd, int *cmdfd, int quiet) {
close(*errfd);
if (cmdfd)
close(*cmdfd);
+
+ /* close up extra fds, and hope this doesn't break anything */
+ sc_open_max = sysconf(_SC_OPEN_MAX);
+ if(sc_open_max > 1) {
+ int fd;
+ for(fd = 3; fd < sc_open_max; fd++) {
+ close(fd);
+ }
+ }
+
execvp(args[0],args);
perror("execvp");
exit(-1);
diff --git a/src/testd.c b/src/testd.c
index 7deb00eb..b2a5c7e6 100644
--- a/src/testd.c
+++ b/src/testd.c
@@ -1,5 +1,6 @@
#include <sys/signal.h>
#include <unistd.h>
+#include <stdlib.h>
int main() {
signal(SIGTERM, SIG_IGN);