Attached is a patch which introduces two new variables, pgp_autoselectkey and
pgp_confirmhook, with defaults of 0/no and 1/yes respectively.  The motivation
here is that when I use pgp-hook I really don't want to be asked if that's the
key I intended to use.  Arguably, the confirmation is useful in case I've made
a typo, but I think that would still be a one-time check.  Similarly, the
automatic selection of a key is useful to me since I've (usually) already
decided on the correct key with pgp-hook.  There is also the case where key
selection is obvious based on recipient address.  Any chances this will get
included into the next/some release of mutt?

regards.
--
-Dale
--- init.h 2002/01/02 07:27:09  1.1.1.2
+++ init.h 2002/01/02 19:07:13
@@ -1148,6 +1148,14 @@
 
 #ifdef HAVE_PGP
 
+  { "pgp_autoselectkey",       DT_BOOL, R_NONE, OPTPGPAUTOSELECT, 0 },
+  /*
+  ** .pp
+  ** If set, then a list of keys is not presented for selection when only
+  ** one matching key is available.  This may be useful in conjunction with
+  ** the \fIpgp-hook\fP command (with ``$$pgp_confirmhook'' set) and the
+  ** ``$$pgp_ignore_subkeys'' variable.
+  */
   { "pgp_autosign",    DT_BOOL, R_NONE, OPTPGPAUTOSIGN, 0 },
   /*
   ** .pp
@@ -1164,6 +1172,14 @@
   ** to the \fIsend-hook\fP command.  It can be overridden by use of the
   ** \fIpgp-menu\fP, when encryption is not required or signing is
   ** requested as well.
+  */
+  { "pgp_confirmhook", DT_BOOL, R_NONE, OPTPGPCONFIRMHOOK, 1 },
+  /*
+  ** .pp
+  ** If set, then you will be prompted for confirmation of keys when using
+  ** the \fIpgp-hook\fP command.  If unset, no such confirmation prompt will
+  ** be presented.  This is generally considered unsafe, especially where
+  ** typos are concerned.
   */
   { "pgp_ignore_subkeys", DT_BOOL, R_NONE, OPTPGPIGNORESUB, 1},
   /*
--- mutt.h 2002/01/02 07:27:09  1.1.1.2
+++ mutt.h 2002/01/02 08:07:32
@@ -411,8 +411,10 @@
   /* PGP options */
   
 #ifdef HAVE_PGP
+  OPTPGPAUTOSELECT,
   OPTPGPAUTOSIGN,
   OPTPGPAUTOENCRYPT,
+  OPTPGPCONFIRMHOOK,
   OPTPGPIGNORESUB,
   OPTPGPLONGIDS,
   OPTPGPREPLYENCRYPT,
--- pgp.c 2001/12/28 07:50:33   1.1.1.1
+++ pgp.c 2002/01/02 06:30:44
@@ -1366,7 +1366,7 @@
     {
       int r;
       snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, 
p->mailbox);
-      if ((r = mutt_yesorno (buf, M_YES)) == M_YES)
+      if (!option(OPTPGPCONFIRMHOOK) || (r = mutt_yesorno (buf, M_YES)) == M_YES)
       {
        /* check for e-mail address */
        if ((t = strchr (keyID, '@')) && 
--- pgpkey.c 2001/12/28 07:50:33        1.1.1.1
+++ pgpkey.c 2002/01/02 19:15:39
@@ -435,6 +435,11 @@
   return rv;
 }
 
+
+#define pgp_trusted_key(k) (!option(OPTPGPCHECKTRUST) \
+                            || (pgp_id_is_valid((k)->address) \
+                                && pgp_id_is_strong((k)->address)))
+
 static pgp_key_t *pgp_select_key (pgp_key_t *keys,
                                  ADDRESS * p, const char *s)
 {
@@ -450,6 +455,7 @@
   pgp_uid_t *a;
   int (*f) (const void *, const void *);
 
+  int keymatch = 0;            /* count matching keys */
   int unusable = 0;
 
   keymax = 0;
@@ -479,6 +485,7 @@
       
       KeyTable[i++] = a;
     }
+    keymatch++;
   }
 
   if (!i && unusable)
@@ -487,6 +494,17 @@
     mutt_sleep (1);
     return NULL;
   }
+  else if (keymatch == 1 && option(OPTPGPAUTOSELECT) && 
+pgp_trusted_key(KeyTable[0]->parent))
+  {
+    /*
+     * In fact, there may be multiple entries in KeyTable even when there is only
+     * one matching key as there may be many addresses (uids) per key...we select
+     * the 0th entry, which is actually the last one listed....should be irrelevant
+     */
+    kp = KeyTable[0]->parent;
+    safe_free ((void **) &KeyTable);
+    return (kp);
+  }
 
   switch (PgpSortKeys & SORT_MASK)
   {
@@ -597,9 +615,7 @@
          break;
        }
       
-      if (option (OPTPGPCHECKTRUST) &&
-         (!pgp_id_is_valid (KeyTable[menu->current])
-          || !pgp_id_is_strong (KeyTable[menu->current])))
+      if (!pgp_trusted_key(KeyTable[menu->current]->parent))
       {
        char *s = "";
        char buff[LONG_STRING];

Attachment: msg22137/pgp00000.pgp
Description: PGP signature

Reply via email to