gpg-agent features of loopback-pinentry mode, preset_passphrase
Aaron Haggerty
hagman33 at icloud.com
Tue May 19 07:05:58 CEST 2015
Fuck u
A
> On May 18, 2015, at 11:03 PM, NIIBE Yutaka <gniibe at fsij.org> wrote:
>
>> On 05/18/2015 07:12 PM, Werner Koch wrote:
>> Actually, I expected that the loopback mode would be used with
>> --command-fd and not with the one-time setting of a passphrase. I kept
>> passphrase working because that can be used for symmteric encryption.
>>
>> After all loopback mode is a hack to bypass the standard way of asking
>> for passphrases and to allow a simpler thing than a pinentry-wrapper
>> (e.g. for use by CGIs). We should never advertise it as a way to query
>> an unprotect-the-secret-key-passphrase - this would defeat the split
>> between gpg and gpg-agent.
>>
>> Your suggestion to query the availibility of feature first is good from
>> the average user perspective. However, average users should not use the
>> loopback mode anyway (unless a tool uses it invisible).
>
> Thank you for the explanation. I understand the intent and
> background.
>
> I decline adding error message to user for suggesting loopback mode.
>
>
> Well, let's consider how to handle the issue 1928:
> https://bugs.gnupg.org/gnupg/issue1928
>
> With classic and stable versions, it worked:
>
> (0) gpg --batch --passphrase-file pass-file --decrypt encrypted-file
>
> Now with 2.1, what's the answer to the existing script(s)?
>
> Using command-file, it would be:
>
> (1) gpg --batch --pinentry-mode=loopback --command-file input-file \
> --decrypt encrypted-file
>
> This requires allow-loopback-pinentry option in .gnupg/gpg-agent.conf.
>
> I understand that using loopback mode is for expert, so, I think that
> the requirement of configuration of allow-loopback-pinentry is
> legitimate (it makes sense to have default as not allowing loopback
> mode).
>
> Although it would not be intended, following also works with 2.1 (with
> allow-loopback-pinentry option of gpg-agent).
>
> (2) gpg2 --batch --pinentry-mode=loopback --passphrase-file pass-file \
> --decrypt encrypted-file
>
>
> While the split between gpg and gpg-agent highly makes sense for
> interactive usages, in general, there might still be valid usages
> where it doesn't matter much and where it's OK to invoke gpg-agent for
> every invocation of gpg command.
>
> While we lead/ask people to pinentry wrapper solution or (1) with
> GnuPG 2.1, I think that requiring change from (0) to (1) or (2) would
> be still a regression.
>
> Just in case, following is a patch to support (0) with GnuPG 2.1. It
> let give gpg to pass "OPTION pinentry-mode=loopback" when the function
> have_static_passphrase returns true and to offer the string of
> get_static_passphrase to gpg-agent.
>
>
> BTW, in the commit of 1cd6445eec4c3642ad92afb02f3563a01cc10c10 in
> January 30, 2013, I think that the comment
>
> /* We do not pass errors to avoid breaking other code. */
>
> should have been removed.
>
>
> diff --git a/g10/call-agent.c b/g10/call-agent.c
> index edee66e..258a48b 100644
> --- a/g10/call-agent.c
> +++ b/g10/call-agent.c
> @@ -163,18 +163,18 @@ default_inq_cb (void *opaque, const char *line)
> if (err)
> log_error (_("failed to proxy %s inquiry to client\n"),
> "PINENTRY_LAUNCHED");
> - /* We do not pass errors to avoid breaking other code. */
> + return err;
> }
> - else if ((has_leading_keyword (line, "PASSPHRASE")
> - || has_leading_keyword (line, "NEW_PASSPHRASE"))
> - && opt.pinentry_mode == PINENTRY_MODE_LOOPBACK)
> +
> + if ((has_leading_keyword (line, "PASSPHRASE")
> + || has_leading_keyword (line, "NEW_PASSPHRASE")))
> {
> if (have_static_passphrase ())
> {
> const char *s = get_static_passphrase ();
> - err = assuan_send_data (parm->ctx, s, strlen (s));
> + return assuan_send_data (parm->ctx, s, strlen (s));
> }
> - else
> + else if (opt.batch || opt.pinentry_mode == PINENTRY_MODE_LOOPBACK)
> {
> char *pw;
>
> @@ -189,11 +189,11 @@ default_inq_cb (void *opaque, const char *line)
> else
> err = assuan_send_data (parm->ctx, pw, strlen (pw));
> xfree (pw);
> + return err;
> }
> }
> - else
> - log_debug ("ignoring gpg-agent inquiry '%s'\n", line);
>
> + log_debug ("ignoring gpg-agent inquiry '%s'\n", line);
> return err;
> }
>
> @@ -306,9 +306,10 @@ start_agent (ctrl_t ctrl, int for_card)
> assuan_transact (agent_ctx, "OPTION agent-awareness=2.1.0",
> NULL, NULL, NULL, NULL, NULL, NULL);
> /* Pass on the pinentry mode. */
> - if (opt.pinentry_mode)
> + if (have_static_passphrase () || opt.pinentry_mode)
> {
> char *tmp = xasprintf ("OPTION pinentry-mode=%s",
> + opt.batch ? "loopback" :
> str_pinentry_mode (opt.pinentry_mode));
> rc = assuan_transact (agent_ctx, tmp,
> NULL, NULL, NULL, NULL, NULL, NULL);
> --
>
> _______________________________________________
> Gnupg-devel mailing list
> Gnupg-devel at gnupg.org
> http://lists.gnupg.org/mailman/listinfo/gnupg-devel
More information about the Gnupg-devel
mailing list