]> granicus.if.org Git - neomutt/commitdiff
Revert "Move setting of GPG_TTY to mutt_init(). (see #3948)"
authorRichard Russon <rich@flatcap.org>
Thu, 8 Jun 2017 21:29:30 +0000 (22:29 +0100)
committerRichard Russon <rich@flatcap.org>
Thu, 8 Jun 2017 21:34:11 +0000 (22:34 +0100)
This reverts commit 89ddfa61c180de00769f6e1798579ec80349a4eb.

This commit was created by upstream and then reverted citing possible
security problems leaking the GPG_TTY env var.

init.c
ncrypt/pgp.c

diff --git a/init.c b/init.c
index 63226e6966caeff0fd994684a48b277504dbd978..3efebab3cc25a85e569c6260200ac93483afff60 100644 (file)
--- a/init.c
+++ b/init.c
@@ -3924,7 +3924,6 @@ 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;
@@ -4143,20 +4142,6 @@ 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"
index 4837025587e9c608841b6a71fffa172450f20006..db85640fe0ec81d04e3d358487d4b30d593038e8 100644 (file)
@@ -31,6 +31,7 @@
 #include <regex.h>
 #include <stdbool.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
 #include <time.h>
@@ -96,13 +97,21 @@ 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)
 {
-  return option (OPTUSEGPGAGENT);
+  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;
 }
 
 static struct PgpKeyInfo *_pgp_parent(struct PgpKeyInfo *k)