From 64672ccebd3d16042ab288731ff9d41985a4d238 Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Sun, 14 Nov 2010 15:48:03 -0500 Subject: [PATCH] libassuan: fix for commit 386e7ee when using a local pinentry. --- assuan/assuan-defs.h | 1 + assuan/assuan-io.c | 4 ++-- assuan/assuan-pipe-connect.c | 7 +++---- assuan/assuan.h | 3 ++- src/pinentry.c | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/assuan/assuan-defs.h b/assuan/assuan-defs.h index 166814ad..5e9945de 100644 --- a/assuan/assuan-defs.h +++ b/assuan/assuan-defs.h @@ -204,6 +204,7 @@ struct assuan_context_s /* io routines. */ struct assuan_io *io; + int no_io_hooks; }; /*-- assuan-pipe-server.c --*/ diff --git a/assuan/assuan-io.c b/assuan/assuan-io.c index 7ff8adf0..2d7b8825 100644 --- a/assuan/assuan-io.c +++ b/assuan/assuan-io.c @@ -109,7 +109,7 @@ _assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size) { ssize_t retval; - if (_assuan_io_hooks.read_hook) { + if (_assuan_io_hooks.read_hook && !ctx->no_io_hooks) { if (_assuan_io_hooks.read_hook (ctx, ctx->inbound.fd, buffer, size, &retval) == 1) return retval; @@ -172,7 +172,7 @@ _assuan_simple_write (assuan_context_t ctx, const void *buffer, size_t size) { ssize_t retval; - if (_assuan_io_hooks.write_hook) { + if (_assuan_io_hooks.write_hook && !ctx->no_io_hooks) { if (_assuan_io_hooks.write_hook (ctx, ctx->outbound.fd, buffer, size, &retval) == 1) return retval; diff --git a/assuan/assuan-pipe-connect.c b/assuan/assuan-pipe-connect.c index 05a3be98..111ac387 100644 --- a/assuan/assuan-pipe-connect.c +++ b/assuan/assuan-pipe-connect.c @@ -189,8 +189,6 @@ pipe_connect_unix (assuan_context_t *ctx, int wp[2]; char mypidstr[50]; - (void)flags; - if (!ctx || !name || !argv || !argv[0]) return _assuan_error (ASSUAN_Invalid_Value); @@ -217,6 +215,7 @@ pipe_connect_unix (assuan_context_t *ctx, close (wp[1]); return err; } + (*ctx)->no_io_hooks = flags; (*ctx)->pipe_mode = 1; (*ctx)->inbound.fd = rp[0]; /* Our inbound is read end of read pipe. */ (*ctx)->outbound.fd = wp[1]; /* Our outbound is write end of write pipe. */ @@ -825,9 +824,9 @@ pipe_connect_w32 (assuan_context_t *ctx, descriptors not to close in the child. */ assuan_error_t assuan_pipe_connect (assuan_context_t *ctx, const char *name, - const char *const argv[], int *fd_child_list) + const char *const argv[], int *fd_child_list, int flags) { - return pipe_connect (ctx, name, argv, fd_child_list, NULL, NULL, 0); + return pipe_connect (ctx, name, argv, fd_child_list, NULL, NULL, flags); } diff --git a/assuan/assuan.h b/assuan/assuan.h index 4ed35044..df9965ad 100644 --- a/assuan/assuan.h +++ b/assuan/assuan.h @@ -507,7 +507,8 @@ void assuan_set_sock_nonce (assuan_context_t ctx, assuan_sock_nonce_t *nonce); assuan_error_t assuan_pipe_connect (assuan_context_t *ctx, const char *name, const char *const argv[], - int *fd_child_list); + int *fd_child_list, + int flags); assuan_error_t assuan_pipe_connect2 (assuan_context_t *ctx, const char *name, const char *const argv[], diff --git a/src/pinentry.c b/src/pinentry.c index 1f592236..22584591 100644 --- a/src/pinentry.c +++ b/src/pinentry.c @@ -161,7 +161,7 @@ static gpg_error_t launch_pinentry(pwm_t *pwm) rc = assuan_pipe_connect(&ctx, pwm->pinentry_path ? pwm->pinentry_path : PINENTRY_PATH, argv, - child_list); + child_list, 1); if (ttybuf) pwmd_free(ttybuf); -- 2.11.4.GIT