aboutsummaryrefslogtreecommitdiffstats
path: root/agent
diff options
context:
space:
mode:
Diffstat (limited to 'agent')
-rw-r--r--agent/call-pinentry.c17
-rw-r--r--agent/gpg-agent.c5
2 files changed, 14 insertions, 8 deletions
diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c
index e5977ad6a..a96406fa3 100644
--- a/agent/call-pinentry.c
+++ b/agent/call-pinentry.c
@@ -205,6 +205,7 @@ static int
start_pinentry (ctrl_t ctrl)
{
int rc = 0;
+ const char *full_pgmname;
const char *pgmname;
assuan_context_t ctx;
const char *argv[5];
@@ -257,11 +258,11 @@ start_pinentry (ctrl_t ctrl)
#endif
}
- if (!opt.pinentry_program || !*opt.pinentry_program)
- opt.pinentry_program = gnupg_module_name (GNUPG_MODULE_NAME_PINENTRY);
- pgmname = opt.pinentry_program;
- if ( !(pgmname = strrchr (opt.pinentry_program, '/')))
- pgmname = opt.pinentry_program;
+ full_pgmname = opt.pinentry_program;
+ if (!full_pgmname || !*full_pgmname)
+ full_pgmname = gnupg_module_name (GNUPG_MODULE_NAME_PINENTRY);
+ if ( !(pgmname = strrchr (full_pgmname, '/')))
+ pgmname = full_pgmname;
else
pgmname++;
@@ -269,7 +270,7 @@ start_pinentry (ctrl_t ctrl)
the resource bundle. For other systems we stick to the usual
convention of supplying only the name of the program. */
#ifdef __APPLE__
- argv[0] = opt.pinentry_program;
+ argv[0] = full_pgmname;
#else /*!__APPLE__*/
argv[0] = pgmname;
#endif /*__APPLE__*/
@@ -310,13 +311,13 @@ 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, opt.pinentry_program, argv,
+ rc = assuan_pipe_connect (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",
- opt.pinentry_program, gpg_strerror (rc));
+ full_pgmname, gpg_strerror (rc));
assuan_release (ctx);
return unlock_pinentry (gpg_error (GPG_ERR_NO_PIN_ENTRY));
}
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index a874e76c2..6e1c76e20 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -1827,9 +1827,14 @@ agent_sighup_action (void)
{
log_info ("SIGHUP received - "
"re-reading configuration and flushing cache\n");
+
agent_flush_cache ();
reread_configuration ();
agent_reload_trustlist ();
+ /* We flush the module name cache so that after installing a
+ "pinentry" binary that one can be used in case the
+ "pinentry-basic" fallback was in use. */
+ gnupg_module_name_flush_some ();
}