[git] GnuPG - branch, master, updated. gnupg-2.2.1-34-g3b66a25
by NIIBE Yutaka
cvs at cvs.gnupg.org
Thu Oct 26 07:44:00 CEST 2017
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU Privacy Guard".
The branch, master has been updated
via 3b66a256e3760e88066ca11b7b49d924e42aa46b (commit)
from bf26c08b95389718ba07f12789d372c6f438134f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 3b66a256e3760e88066ca11b7b49d924e42aa46b
Author: NIIBE Yutaka <gniibe at fsij.org>
Date: Thu Oct 26 14:40:38 2017 +0900
agent: Allow recursive use of pinentry.
* agent/agent.h (struct server_control_s): Add pinentry_level.
* agent/call-pinentry.c (agent_popup_message_stop): Not clear
ENTRY_CTX here.
(unlock_pinentry): Handle recursion. Clear ENTRY_CTX here.
(start_pinentry): Allow recursive use.
--
GnuPG-bug-id: 3190
Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
diff --git a/agent/agent.h b/agent/agent.h
index af64f33..78a3764 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -255,6 +255,9 @@ struct server_control_s
/* The current S2K which might be different from the calibrated
count. */
unsigned long s2k_count;
+
+ /* Recursion level of pinentry. */
+ int pinentry_level;
};
diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c
index 98af95a..ef76007 100644
--- a/agent/call-pinentry.c
+++ b/agent/call-pinentry.c
@@ -177,15 +177,19 @@ unlock_pinentry (gpg_error_t rc)
}
}
- entry_ctx = NULL;
- err = npth_mutex_unlock (&entry_lock);
- if (err)
+ if (--entry_owner->pinentry_level == 0)
{
- log_error ("failed to release the entry lock: %s\n", strerror (err));
- if (!rc)
- rc = gpg_error_from_errno (err);
+ entry_owner = NULL;
+ entry_ctx = NULL;
+ err = npth_mutex_unlock (&entry_lock);
+ if (err)
+ {
+ log_error ("failed to release the entry lock: %s\n", strerror (err));
+ if (!rc)
+ rc = gpg_error_from_errno (err);
+ }
+ assuan_release (ctx);
}
- assuan_release (ctx);
return rc;
}
@@ -288,6 +292,13 @@ start_pinentry (ctrl_t ctrl)
char *flavor_version;
int err;
+ if (entry_owner == ctrl)
+ {
+ /* Allow recursive use of pinentry. */
+ ctrl->pinentry_level++;
+ return 0;
+ }
+
npth_clock_gettime (&abstime);
abstime.tv_sec += LOCK_TIMEOUT;
err = npth_mutex_timedlock (&entry_lock, &abstime);
@@ -371,6 +382,10 @@ start_pinentry (ctrl_t ctrl)
log_error ("can't allocate assuan context: %s\n", gpg_strerror (rc));
return rc;
}
+
+ ctrl->pinentry_level = 1;
+ entry_ctx = ctx;
+
/* We don't want to log the pinentry communication to make the logs
easier to read. We might want to add a new debug option to enable
pinentry logging. */
@@ -382,17 +397,15 @@ start_pinentry (ctrl_t ctrl)
that atfork is used to change the environment for pinentry. We
start the server in detached mode to suppress the console window
under Windows. */
- rc = assuan_pipe_connect (ctx, full_pgmname, argv,
+ rc = assuan_pipe_connect (entry_ctx, full_pgmname, argv,
no_close_list, atfork_cb, ctrl,
ASSUAN_PIPE_CONNECT_DETACHED);
if (rc)
{
log_error ("can't connect to the PIN entry module '%s': %s\n",
full_pgmname, gpg_strerror (rc));
- assuan_release (ctx);
return unlock_pinentry (gpg_error (GPG_ERR_NO_PIN_ENTRY));
}
- entry_ctx = ctx;
if (DBG_IPC)
log_debug ("connection to PIN entry established\n");
@@ -1552,7 +1565,6 @@ agent_popup_message_stop (ctrl_t ctrl)
/* Thread IDs are opaque, but we try our best here by resetting it
to the same content that a static global variable has. */
memset (&popup_tid, '\0', sizeof (popup_tid));
- entry_owner = NULL;
/* Now we can close the connection. */
unlock_pinentry (0);
-----------------------------------------------------------------------
Summary of changes:
agent/agent.h | 3 +++
agent/call-pinentry.c | 34 +++++++++++++++++++++++-----------
2 files changed, 26 insertions(+), 11 deletions(-)
hooks/post-receive
--
The GNU Privacy Guard
http://git.gnupg.org
More information about the Gnupg-commits
mailing list