diff options
Diffstat (limited to 'common/asshelp.c')
-rw-r--r-- | common/asshelp.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/common/asshelp.c b/common/asshelp.c index b373baf98..b2d13f32b 100644 --- a/common/asshelp.c +++ b/common/asshelp.c @@ -183,6 +183,13 @@ start_new_gpg_agent (assuan_context_t *r_ctx, *r_ctx = NULL; + rc = assuan_new (&ctx); + if (rc) + { + log_error ("error allocating assuan context: %s\n", gpg_strerror (rc)); + return rc; + } + restart: infostr = force_pipe_server? NULL : getenv ("GPG_AGENT_INFO"); if (!infostr || !*infostr) @@ -192,7 +199,7 @@ start_new_gpg_agent (assuan_context_t *r_ctx, /* First check whether we can connect at the standard socket. */ sockname = make_filename (homedir, "S.gpg-agent", NULL); - rc = assuan_socket_connect (&ctx, sockname, 0); + rc = assuan_socket_connect (ctx, sockname, 0, 0); if (rc) { @@ -210,6 +217,7 @@ start_new_gpg_agent (assuan_context_t *r_ctx, log_error ("error flushing pending output: %s\n", strerror (errno)); xfree (sockname); + assuan_release (ctx); return tmperr; } @@ -239,7 +247,7 @@ start_new_gpg_agent (assuan_context_t *r_ctx, /* Give the agent some time to prepare itself. */ gnupg_sleep (3); /* Now try again to connect the agent. */ - rc = assuan_socket_connect (&ctx, sockname, 0); + rc = assuan_socket_connect (ctx, sockname, 0, 0); } } #else /*!HAVE_W32_SYSTEM*/ @@ -260,13 +268,13 @@ start_new_gpg_agent (assuan_context_t *r_ctx, i=0; if (log_get_fd () != -1) - no_close_list[i++] = log_get_fd (); - no_close_list[i++] = fileno (stderr); + no_close_list[i++] = assuan_fd_from_posix_fd (log_get_fd ()); + no_close_list[i++] = assuan_fd_from_posix_fd (fileno (stderr)); no_close_list[i] = -1; /* Connect to the agent and perform initial handshaking. */ - rc = assuan_pipe_connect (&ctx, agent_program, argv, - no_close_list); + rc = assuan_pipe_connect (ctx, agent_program, argv, + no_close_list, NULL, NULL, 0); } #endif /*!HAVE_W32_SYSTEM*/ } @@ -299,7 +307,7 @@ start_new_gpg_agent (assuan_context_t *r_ctx, goto restart; } - rc = assuan_socket_connect (&ctx, infostr, pid); + rc = assuan_socket_connect (ctx, infostr, pid, 0); xfree (infostr); if (gpg_err_code (rc) == GPG_ERR_ASS_CONNECT_FAILED) { @@ -312,6 +320,7 @@ start_new_gpg_agent (assuan_context_t *r_ctx, if (rc) { log_error ("can't connect to the agent: %s\n", gpg_strerror (rc)); + assuan_release (ctx); return gpg_error (GPG_ERR_NO_AGENT); } @@ -326,7 +335,7 @@ start_new_gpg_agent (assuan_context_t *r_ctx, session_env); if (rc) { - assuan_disconnect (ctx); + assuan_release (ctx); return rc; } |