aboutsummaryrefslogtreecommitdiffstats
path: root/agent
diff options
context:
space:
mode:
Diffstat (limited to 'agent')
-rw-r--r--agent/agent.h4
-rw-r--r--agent/command.c9
-rw-r--r--agent/gpg-agent.c6
3 files changed, 11 insertions, 8 deletions
diff --git a/agent/agent.h b/agent/agent.h
index 37582483b..9a7b59db3 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -86,8 +86,8 @@ struct
/* Enable pinentry debugging (--debug 1024 should also be used). */
int debug_pinentry;
- /* Filename of the program to start as pinentry. */
- const char *pinentry_program;
+ /* Filename of the program to start as pinentry (malloced). */
+ char *pinentry_program;
/* Filename of the program to handle daemon tasks. */
const char *daemon_program[DAEMON_MAX_TYPE];
diff --git a/agent/command.c b/agent/command.c
index 20ae08e9f..575456cc5 100644
--- a/agent/command.c
+++ b/agent/command.c
@@ -1988,9 +1988,6 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
struct pin_entry_info_s *pi2 = NULL;
int is_generated;
- if (ctrl->restricted)
- return leave_cmd (ctx, gpg_error (GPG_ERR_FORBIDDEN));
-
opt_data = has_option (line, "--data");
opt_check = has_option (line, "--check");
opt_no_ask = has_option (line, "--no-ask");
@@ -2039,7 +2036,9 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
if (!desc)
return set_error (GPG_ERR_ASS_PARAMETER, "no description given");
- if (!strcmp (cacheid, "X"))
+ /* The only limitation in restricted mode is that we don't consider
+ * the cache. */
+ if (ctrl->restricted || !strcmp (cacheid, "X"))
cacheid = NULL;
if (!strcmp (errtext, "X"))
errtext = NULL;
@@ -2121,7 +2120,7 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
entry_errtext = NULL;
is_generated = !!(pi->status & PINENTRY_STATUS_PASSWORD_GENERATED);
- /* We don't allow an empty passpharse in this mode. */
+ /* We don't allow an empty passphrase in this mode. */
if (!is_generated
&& check_passphrase_constraints (ctrl, pi->pin,
pi->constraints_flags,
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index e7818697d..3c71ba65d 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -876,6 +876,7 @@ parse_rereadable_options (gpgrt_argparse_t *pargs, int reread)
opt.debug = 0;
opt.no_grab = 1;
opt.debug_pinentry = 0;
+ xfree (opt.pinentry_program);
opt.pinentry_program = NULL;
opt.pinentry_touch_file = NULL;
xfree (opt.pinentry_invisible_char);
@@ -936,7 +937,10 @@ parse_rereadable_options (gpgrt_argparse_t *pargs, int reread)
case oNoGrab: opt.no_grab |= 1; break;
case oGrab: opt.no_grab |= 2; break;
- case oPinentryProgram: opt.pinentry_program = pargs->r.ret_str; break;
+ case oPinentryProgram:
+ xfree (opt.pinentry_program);
+ opt.pinentry_program = make_filename_try (pargs->r.ret_str, NULL);
+ break;
case oPinentryTouchFile: opt.pinentry_touch_file = pargs->r.ret_str; break;
case oPinentryInvisibleChar:
xfree (opt.pinentry_invisible_char);