diff options
author | Werner Koch <wk@gnupg.org> | 2002-06-27 09:29:57 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2002-06-27 09:29:57 +0200 |
commit | ad4d81f528229e0ecda3246aee3fcf88f0e9c3c3 (patch) | |
tree | c603a97a95f00fd87c32fbbb82242d0c99d62f6d /assuan | |
parent | * Makefile.am (pkglib_PROGRAMS): Put protect-tool there. (diff) | |
download | gnupg2-ad4d81f528229e0ecda3246aee3fcf88f0e9c3c3.tar.xz gnupg2-ad4d81f528229e0ecda3246aee3fcf88f0e9c3c3.zip |
* gpgsm.c (main): Use GNUPG_DEFAULT_HOMEDIR constant.
* call-agent.c (start_agent): Create and pass the list of FD to
keep in the child to assuan.
* call-dirmngr.c (start_dirmngr): Ditto.
* scdaemon.c (main): Use GNUPG_DEFAULT_HOMEDIR constant.
* assuan-pipe-connect.c (assuan_pipe_connect): No special handling
for the log_fd and stderr. Connect stderr to /dev/null if it
should not be retained.
Diffstat (limited to 'assuan')
-rw-r--r-- | assuan/ChangeLog | 6 | ||||
-rw-r--r-- | assuan/assuan-pipe-connect.c | 43 |
2 files changed, 37 insertions, 12 deletions
diff --git a/assuan/ChangeLog b/assuan/ChangeLog index 8b9bd3f55..0a420fed8 100644 --- a/assuan/ChangeLog +++ b/assuan/ChangeLog @@ -1,3 +1,9 @@ +2002-06-27 Werner Koch <wk@gnupg.org> + + * assuan-pipe-connect.c (assuan_pipe_connect): No special handling + for the log_fd and stderr. Connect stderr to /dev/null if it + should not be retained. + 2002-06-26 Werner Koch <wk@gnupg.org> * assuan-buffer.c (assuan_write_line): Make sure we never diff --git a/assuan/assuan-pipe-connect.c b/assuan/assuan-pipe-connect.c index ccfc1f016..40f6b5463 100644 --- a/assuan/assuan-pipe-connect.c +++ b/assuan/assuan-pipe-connect.c @@ -28,6 +28,7 @@ #include <signal.h> #include <unistd.h> #include <errno.h> +#include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> @@ -169,18 +170,16 @@ assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], { int i, n; char errbuf[512]; -#ifdef HAVE_JNLIB_LOGGING - int log_fd = log_get_fd (); -#endif - /* close all files which will not be duped but keep stderr - and log_stream for now */ + int *fdp; + + /* Close all files which will not be duped and are not in the + fd_child_list. */ n = sysconf (_SC_OPEN_MAX); if (n < 0) n = MAX_OPEN_FDS; for (i=0; i < n; i++) { - int *fdp = fd_child_list; - + fdp = fd_child_list; if (fdp) { while (*fdp != -1 && *fdp != i) @@ -188,16 +187,36 @@ assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], } if (!(fdp && *fdp != -1) - && i != fileno (stderr) -#ifdef HAVE_JNLIB_LOGGING - && i != log_fd -#endif && i != rp[1] && i != wp[0]) close(i); } errno = 0; - /* Dup handles and to stdin/stdout and exec */ + /* Dup stderr to /dev/null unless it is in the list of FDs to be + passed to the child. */ + fdp = fd_child_list; + if (fdp) + { + for (; *fdp != -1 && *fdp != STDERR_FILENO; fdp++) + ; + } + if (!fdp || *fdp == -1) + { + int fd = open ("/dev/null", O_WRONLY); + if (fd == -1) + { + LOGERROR1 ("can't open `/dev/null': %s\n", strerror (errno)); + _exit (4); + } + if (dup2 (fd, STDERR_FILENO) == -1) + { + LOGERROR1 ("dup2(dev/null, 2) failed: %s\n", strerror (errno)); + _exit (4); + } + close (fd); + } + + /* Dup handles and to stdin/stdout and exec. */ if (rp[1] != STDOUT_FILENO) { if (dup2 (rp[1], STDOUT_FILENO) == -1) |