X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fexec.c;h=07c35c9bcf36d0e307ebbc48a93fb1e7fafa57e1;hb=a019b6c8144745db63c599680bd693ac02f11666;hp=70c1c18476c1683d7d555b25c16282173402806f;hpb=36e53c066210874f01da525f8c823c137c9574b4;p=collectd.git diff --git a/src/exec.c b/src/exec.c index 70c1c184..07c35c9b 100644 --- a/src/exec.c +++ b/src/exec.c @@ -429,9 +429,19 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) } else if (pid == 0) { - close (fd_pipe_in[1]); - close (fd_pipe_out[0]); - close (fd_pipe_err[0]); + int fd_num; + int fd; + + /* Close all file descriptors but the pipe end we need. */ + fd_num = getdtablesize (); + for (fd = 0; fd < fd_num; fd++) + { + if ((fd == fd_pipe_in[0]) + || (fd == fd_pipe_out[1]) + || (fd == fd_pipe_err[1])) + continue; + close (fd); + } /* Connect the `in' pipe to STDIN */ if (fd_pipe_in[0] != STDIN_FILENO)