From 44a32455c8e41400ea96db4507c8a42bdb65b3b6 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 27 May 2016 22:48:04 +0200 Subject: common: Allow a second input stream for gnupg_exec_tool_stream. * common/exechelp-posix.c (do_exec): Add arg 'except' and pass to close_all_fds. (gnupg_spawn_process): Add arg 'except'. Change callers to pass NULL for it. * common/exechelp-w32.c (gnupg_spawn_process): Add dummy arg 'except'. * common/exechelp-w32ce.c (gnupg_spawn_process): Ditto. * common/exectool.c (copy_buffer_do_copy): Allow NULL for SINK. (gnupg_exec_tool_stream): Add arg 'inextra'. Change callers to pass NULL for it. Allow NULL for OUTPUT. -- This hack is a first step to allow calling gpg for verification of signatures. Signed-off-by: Werner Koch --- common/exechelp-posix.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'common/exechelp-posix.c') diff --git a/common/exechelp-posix.c b/common/exechelp-posix.c index a7a9a929d..aefb6539c 100644 --- a/common/exechelp-posix.c +++ b/common/exechelp-posix.c @@ -278,7 +278,7 @@ get_all_open_fds (void) static void do_exec (const char *pgmname, const char *argv[], int fd_in, int fd_out, int fd_err, - void (*preexec)(void) ) + int *except, void (*preexec)(void) ) { char **arg_list; int i, j; @@ -324,7 +324,7 @@ do_exec (const char *pgmname, const char *argv[], } /* Close all other files. */ - close_all_fds (3, NULL); + close_all_fds (3, except); if (preexec) preexec (); @@ -420,7 +420,7 @@ gnupg_create_pipe (int filedes[2]) /* Fork and exec the PGMNAME, see exechelp.h for details. */ gpg_error_t gnupg_spawn_process (const char *pgmname, const char *argv[], - void (*preexec)(void), unsigned int flags, + int *except, void (*preexec)(void), unsigned int flags, estream_t *r_infp, estream_t *r_outfp, estream_t *r_errfp, @@ -525,7 +525,8 @@ gnupg_spawn_process (const char *pgmname, const char *argv[], gcry_control (GCRYCTL_TERM_SECMEM); es_fclose (outfp); es_fclose (errfp); - do_exec (pgmname, argv, inpipe[0], outpipe[1], errpipe[1], preexec); + do_exec (pgmname, argv, inpipe[0], outpipe[1], errpipe[1], + except, preexec); /*NOTREACHED*/ } @@ -575,7 +576,7 @@ gnupg_spawn_process_fd (const char *pgmname, const char *argv[], { gcry_control (GCRYCTL_TERM_SECMEM); /* Run child. */ - do_exec (pgmname, argv, infd, outfd, errfd, NULL); + do_exec (pgmname, argv, infd, outfd, errfd, NULL, NULL); /*NOTREACHED*/ } @@ -728,7 +729,7 @@ gnupg_spawn_process_detached (const char *pgmname, const char *argv[], for (i=0; envp[i]; i++) putenv (xstrdup (envp[i])); - do_exec (pgmname, argv, -1, -1, -1, NULL); + do_exec (pgmname, argv, -1, -1, -1, NULL, NULL); /*NOTREACHED*/ } -- cgit v1.2.3