diff options
author | Daiki Ueno <[email protected]> | 2015-06-09 12:07:00 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-06-10 13:16:06 +0000 |
commit | 691dae270b3b741178912599724d69adabdb48b9 (patch) | |
tree | 83e874177d92b18481cddad587d5dbde76247fda /agent | |
parent | doc: Do not used fixed file names in the manuals. (diff) | |
download | gnupg-691dae270b3b741178912599724d69adabdb48b9.tar.gz gnupg-691dae270b3b741178912599724d69adabdb48b9.zip |
agent: Add option --allow-emacs-pinentry
* agent/agent.h (opt): Add field allow_emacs_pinentry.
* agent/call-pinentry.c (start_pinentry): Act upon new var.
* agent/gpg-agent.c (oAllowEmacsPinentry): New.
(opts): Add option --allow-emacs-pinentry.
(parse_rereadable_options): Set this option.
* tools/gpgconf-comp.c (gc_options_gpg_agent): Add new option.
--
gpgconf-comp and manual entry added by wk.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'agent')
-rw-r--r-- | agent/agent.h | 4 | ||||
-rw-r--r-- | agent/call-pinentry.c | 10 | ||||
-rw-r--r-- | agent/gpg-agent.c | 9 |
3 files changed, 23 insertions, 0 deletions
diff --git a/agent/agent.h b/agent/agent.h index dbbf68922..ab8dc9f22 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -133,6 +133,10 @@ struct to allow it to enable such a cache. */ int allow_external_cache; + /* If this global option is true, the Assuan option of Pinentry + allow-emacs-prompt is allowed. */ + int allow_emacs_pinentry; + int keep_tty; /* Don't switch the TTY (for pinentry) on request */ int keep_display; /* Don't switch the DISPLAY (for pinentry) on request */ diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c index 018a609a3..ba40f4dc1 100644 --- a/agent/call-pinentry.c +++ b/agent/call-pinentry.c @@ -423,6 +423,16 @@ start_pinentry (ctrl_t ctrl) return unlock_pinentry (rc); } + if (opt.allow_emacs_pinentry) + { + /* Indicate to the pinentry that it may read passphrase through + Emacs minibuffer, if possible. */ + rc = assuan_transact (entry_ctx, "OPTION allow-emacs-prompt", + NULL, NULL, NULL, NULL, NULL, NULL); + if (rc && gpg_err_code (rc) != GPG_ERR_UNKNOWN_OPTION) + return unlock_pinentry (rc); + } + { /* Provide a few default strings for use by the pinentries. This diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 659aa2c29..2acb65063 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -120,6 +120,7 @@ enum cmd_and_opt_values oAllowPresetPassphrase, oAllowLoopbackPinentry, oNoAllowExternalCache, + oAllowEmacsPinentry, oKeepTTY, oKeepDISPLAY, oSSHSupport, @@ -214,6 +215,8 @@ static ARGPARSE_OPTS opts[] = { /* */ N_("allow presetting passphrase")), ARGPARSE_s_n (oAllowLoopbackPinentry, "allow-loopback-pinentry", N_("allow caller to override the pinentry")), + ARGPARSE_s_n (oAllowEmacsPinentry, "allow-emacs-pinentry", + /* */ N_("allow passphrase to be prompted through Emacs")), ARGPARSE_s_n (oSSHSupport, "enable-ssh-support", N_("enable ssh support")), ARGPARSE_s_n (oPuttySupport, "enable-putty-support", @@ -565,6 +568,7 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread) opt.ignore_cache_for_signing = 0; opt.allow_mark_trusted = 1; opt.allow_external_cache = 1; + opt.allow_emacs_pinentry = 0; opt.disable_scdaemon = 0; disable_check_own_socket = 0; return 1; @@ -634,6 +638,9 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread) case oNoAllowExternalCache: opt.allow_external_cache = 0; break; + case oAllowEmacsPinentry: opt.allow_emacs_pinentry = 1; + break; + default: return 0; /* not handled */ } @@ -1080,6 +1087,8 @@ main (int argc, char **argv ) #endif es_printf ("allow-loopback-pinentry:%lu:\n", GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); + es_printf ("allow-emacs-pinentry:%lu:\n", + GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); agent_exit (0); } |