From: NIIBE Yutaka Date: Wed, 24 Jul 2019 15:15:32 +0900 Subject: common: Use gnupg_spawn_process_fd to invoke gpg-agent/dirmngr. * common/asshelp.c (start_new_gpg_agent): Call gnupg_spawn_process_fd and gnupg_wait_process. (start_new_dirmngr): Likewise. -- With --daemon option, gpg-agent/dirmngr detaches by itself. Signed-off-by: NIIBE Yutaka (cherry picked from commit b1c56cf9e2bb51abfd47747128bd2a6285ed1623) --- common/asshelp.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/common/asshelp.c b/common/asshelp.c index d87017e..73f159d 100644 --- a/common/asshelp.c +++ b/common/asshelp.c @@ -477,8 +477,13 @@ start_new_gpg_agent (assuan_context_t *r_ctx, if (!(err = lock_spawning (&lock, gnupg_homedir (), "agent", verbose)) && assuan_socket_connect (ctx, sockname, 0, 0)) { - err = gnupg_spawn_process_detached (program? program : agent_program, - argv, NULL); + pid_t pid; + + err = gnupg_spawn_process_fd (program? program : agent_program, + argv, -1, -1, -1, &pid); + if (!err) + err = gnupg_wait_process (program? program : agent_program, + pid, 1, NULL); if (err) log_error ("failed to start agent '%s': %s\n", agent_program, gpg_strerror (err)); @@ -612,7 +617,12 @@ start_new_dirmngr (assuan_context_t *r_ctx, if (!(err = lock_spawning (&lock, gnupg_homedir (), "dirmngr", verbose)) && assuan_socket_connect (ctx, sockname, 0, 0)) { - err = gnupg_spawn_process_detached (dirmngr_program, argv, NULL); + pid_t pid; + + err = gnupg_spawn_process_fd (dirmngr_program, argv, + -1, -1, -1, &pid); + if (!err) + err = gnupg_wait_process (dirmngr_program, pid, 1, NULL); if (err) log_error ("failed to start the dirmngr '%s': %s\n", dirmngr_program, gpg_strerror (err));