From: Florian Forster Date: Wed, 9 Apr 2008 16:45:38 +0000 (+0200) Subject: Merge branch 'collectd-4.3' X-Git-Tag: collectd-4.4.0~41 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=b58af48a482b30999bd0b71c470c5dbab8fd5abd;p=collectd.git Merge branch 'collectd-4.3' Conflicts: src/exec.c --- b58af48a482b30999bd0b71c470c5dbab8fd5abd diff --cc src/exec.c index 70c1c184,5eae906b..07c35c9b --- a/src/exec.c +++ b/src/exec.c @@@ -429,10 -421,32 +429,20 @@@ static int fork_child (program_list_t * } 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])) ++ if ((fd == fd_pipe_in[0]) ++ || (fd == fd_pipe_out[1]) ++ || (fd == fd_pipe_err[1])) + continue; + close (fd); + } - /* If the `out' pipe has the filedescriptor STDIN we have to be careful - * with the `dup's below. So, if this is the case we have to handle the - * `out' pipe first. */ - if (fd_pipe_out[1] == STDIN_FILENO) - { - int new_fileno = (fd_pipe_in[0] == STDOUT_FILENO) - ? STDERR_FILENO : STDOUT_FILENO; - dup2 (fd_pipe_out[1], new_fileno); - close (fd_pipe_out[1]); - fd_pipe_out[1] = new_fileno; - } - /* Now `fd_pipe_out[1]' is either `STDOUT' or `STDERR', but definitely not - * `STDIN_FILENO'. */ - /* Connect the `in' pipe to STDIN */ if (fd_pipe_in[0] != STDIN_FILENO) {