From 89ddfa61c180de00769f6e1798579ec80349a4eb Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Tue, 6 Jun 2017 18:38:46 -0700 Subject: [PATCH] Move setting of GPG_TTY to mutt_init(). (see #3948) This allows other programs mutt runs to use the ncurses pinentry if needed. --- init.c | 15 +++++++++++++++ ncrypt/pgp.c | 18 +++++------------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/init.c b/init.c index 049f4d654..49c0c7e61 100644 --- a/init.c +++ b/init.c @@ -3924,6 +3924,7 @@ void mutt_init(int skip_sys_rc, struct List *commands) char *p, buffer[STRING]; int need_pause = 0; struct Buffer err; + char *tty; mutt_buffer_init(&err); err.dsize = STRING; @@ -4142,6 +4143,20 @@ void mutt_init(int skip_sys_rc, struct List *commands) unset_option(OPTSUSPEND); #endif + /* GPG_TTY is used by the ncurses pinentry program for GPG. GPG is + * sometimes also used to decrypt passwords in programs launched by + * mutt, such as using msmtp as $sendmail, so we set it here as + * opposed to inside pgp.c + * + * We also call setenv() because send_msg() is not converted to use + * the mutt envlist. + */ + if ((tty = ttyname(0))) + { + setenv("GPG_TTY", tty, 0); + mutt_envlist_set("GPG_TTY", tty, 0); + } + mutt_init_history(); /* RFC2368, "4. Unsafe headers" diff --git a/ncrypt/pgp.c b/ncrypt/pgp.c index 5e3ac1fe9..483702558 100644 --- a/ncrypt/pgp.c +++ b/ncrypt/pgp.c @@ -96,21 +96,13 @@ int pgp_valid_passphrase(void) return 0; } +/* This function used to do more: check GPG_AGENT_INFO, + * set GPG_TTY. GPG_AGENT_INFO is no longer exported, and GPG_TTY + * is now set in mutt_init(). + */ bool pgp_use_gpg_agent(void) { - char *tty = NULL; - - /* GnuPG 2.1 no longer exports GPG_AGENT_INFO */ - if (!option(OPTUSEGPGAGENT)) - return false; - - if ((tty = ttyname(0))) - { - setenv("GPG_TTY", tty, 0); - mutt_envlist_set("GPG_TTY", tty, false); - } - - return true; + return option (OPTUSEGPGAGENT); } static struct PgpKeyInfo *_pgp_parent(struct PgpKeyInfo *k) -- 2.40.0