All four find_keys routines have a similar set up code for generating a
single address list out of the to, cc, bcc lists.  This patch pulls all
the code into crypt_get_keys.

This is done to simplify the functions before later patches make them
more complicated (with the auto_mode parameter).


 crypt-gpgme.c             |  42 ++++++++----------------------------------
 crypt-gpgme.h             |   4 ++--
 crypt-mod-pgp-classic.c   |   4 ++--
 crypt-mod-pgp-gpgme.c     |   4 ++--
 crypt-mod-smime-classic.c |   4 ++--
 crypt-mod-smime-gpgme.c   |   4 ++--
 crypt-mod.h               |   3 +--
 crypt.c                   |  25 +++++++++++++++++++++----
 cryptglue.c               |   8 ++++----
 mutt_crypt.h              |   4 ++--
 pgp.c                     |  31 +++----------------------------
 pgp.h                     |   2 +-
 smime.c                   |  34 ++--------------------------------
 smime.h                   |   2 +-
 14 files changed, 53 insertions(+), 118 deletions(-)


# HG changeset patch
# User Kevin McCarthy <ke...@8t8.us>
# Date 1363403034 25200
# Branch HEAD
# Node ID b5cd12aac4cd295d5ebd478c927a7c159c974f10
# Parent  d498f0e91914ac060661661d25d3d2eb2dcba39f
Refactor the address list generation out of the find_keys routines.

All four find_keys routines have a similar set up code for generating a
single address list out of the to, cc, bcc lists.  This patch pulls all
the code into crypt_get_keys.

This is done to simplify the functions before later patches make them
more complicated (with the auto_mode parameter).

diff --git a/crypt-gpgme.c b/crypt-gpgme.c
--- a/crypt-gpgme.c
+++ b/crypt-gpgme.c
@@ -4205,54 +4205,31 @@
       
       BEEP ();
     }
   /* not reached */
 }
 
 /* This routine attempts to find the keyids of the recipients of a
    message.  It returns NULL if any of the keys can not be found.  */
-static char *find_keys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc,
-                        unsigned int app)
+static char *find_keys (ADDRESS *adrlist, unsigned int app)
 {
   char *keyID, *keylist = NULL, *t;
   size_t keylist_size = 0;
   size_t keylist_used = 0;
-  ADDRESS *tmp = NULL, *addr = NULL;
-  ADDRESS **last = &tmp;
+  ADDRESS *addr = NULL;
   ADDRESS *p, *q;
-  int i;
   crypt_key_t *k_info, *key;
   const char *fqdn = mutt_fqdn (1);
 
 #if 0
   *r_application = APPLICATION_PGP|APPLICATION_SMIME;
 #endif
-  
-  for (i = 0; i < 3; i++) 
-    {
-      switch (i)
-        {
-        case 0: p = to; break;
-        case 1: p = cc; break;
-        case 2: p = bcc; break;
-        default: abort ();
-        }
-      
-      *last = rfc822_cpy_adr (p, 0);
-      while (*last)
-        last = &((*last)->next);
-    }
-  
-  if (fqdn)
-    rfc822_qualify (tmp, fqdn);
-  
-  tmp = mutt_remove_duplicates (tmp);
-  
-  for (p = tmp; p ; p = p->next)
+
+  for (p = adrlist; p ; p = p->next)
     {
       char buf[LONG_STRING];
       int forced_valid = 0;
       
       q = p;
       k_info = NULL;
       
       if ((keyID = mutt_crypt_hook (p)) != NULL)
@@ -4279,17 +4256,16 @@
 		  k_info = crypt_getkeybystr (keyID, KEYFLAG_CANENCRYPT, 
 					      app, &forced_valid);
 #endif
 		}
             }
           else if (r == -1)
             {
               FREE (&keylist);
-              rfc822_free_address (&tmp);
               rfc822_free_address (&addr);
               return NULL;
             }
         }
 
       if (k_info == NULL
           && (k_info = crypt_getkeybyaddr (q, KEYFLAG_CANENCRYPT,
                                            app, &forced_valid)) == NULL)
@@ -4301,17 +4277,16 @@
 #if 0
                                         *r_application,
 #else
 					app,
 #endif
 					&forced_valid)) == NULL)
             {
               FREE (&keylist);
-              rfc822_free_address (&tmp);
               rfc822_free_address (&addr);
               return NULL;
             }
         }
       else
         key = k_info;
 
       {
@@ -4330,28 +4305,27 @@
                  keylist_used ? " " : "",  s,
                  forced_valid? "!":"");
       }
       keylist_used = mutt_strlen (keylist);
         
       crypt_free_key (&key);
       rfc822_free_address (&addr);
     }
-  rfc822_free_address (&tmp);
   return (keylist);
 }
 
-char *pgp_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+char *pgp_gpgme_findkeys (ADDRESS *adrlist)
 {
-  return find_keys (to, cc, bcc, APPLICATION_PGP);
+  return find_keys (adrlist, APPLICATION_PGP);
 }
 
-char *smime_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+char *smime_gpgme_findkeys (ADDRESS *adrlist)
 {
-  return find_keys (to, cc, bcc, APPLICATION_SMIME);
+  return find_keys (adrlist, APPLICATION_SMIME);
 }
 
 /*
  * Implementation of `init'.
  */
 
 /* This function contains common code needed to be executed for both the pgp
  * and smime support of gpgme. */
diff --git a/crypt-gpgme.h b/crypt-gpgme.h
--- a/crypt-gpgme.h
+++ b/crypt-gpgme.h
@@ -19,18 +19,18 @@
 #ifndef CRYPT_GPGME_H
 #define CRYPT_GPGME_H
 
 #include "mutt_crypt.h"
 
 void pgp_gpgme_init (void);
 void smime_gpgme_init (void);
 
-char *pgp_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
-char *smime_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+char *pgp_gpgme_findkeys (ADDRESS *adrlist);
+char *smime_gpgme_findkeys (ADDRESS *adrlist);
 
 BODY *pgp_gpgme_encrypt_message (BODY *a, char *keylist, int sign);
 BODY *smime_gpgme_build_smime_entity (BODY *a, char *keylist);
 
 int pgp_gpgme_decrypt_mime (FILE *fpin, FILE **fpout, BODY *b, BODY **cur);
 int smime_gpgme_decrypt_mime (FILE *fpin, FILE **fpout, BODY *b, BODY **cur);
 
 int pgp_gpgme_check_traditional (FILE *fp, BODY *b, int tagged_only);
diff --git a/crypt-mod-pgp-classic.c b/crypt-mod-pgp-classic.c
--- a/crypt-mod-pgp-classic.c
+++ b/crypt-mod-pgp-classic.c
@@ -41,19 +41,19 @@
 {
   return pgp_decrypt_mime (a, b, c, d);
 }
 static int crypt_mod_pgp_application_handler (BODY *m, STATE *s)
 {
   return pgp_application_pgp_handler (m, s);
 }
 
-static char *crypt_mod_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+static char *crypt_mod_pgp_findkeys (ADDRESS *adrlist)
 {
-  return pgp_findKeys (to, cc, bcc);
+  return pgp_findKeys (adrlist);
 }
 
 static BODY *crypt_mod_pgp_sign_message (BODY *a)
 {
   return pgp_sign_message (a);
 }
 
 static int crypt_mod_pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempf)
diff --git a/crypt-mod-pgp-gpgme.c b/crypt-mod-pgp-gpgme.c
--- a/crypt-mod-pgp-gpgme.c
+++ b/crypt-mod-pgp-gpgme.c
@@ -65,19 +65,19 @@
   return pgp_gpgme_check_traditional (fp, b, tagged_only);
 }
 
 static void crypt_mod_pgp_invoke_import (const char *fname)
 {
   pgp_gpgme_invoke_import (fname);
 }
 
-static char *crypt_mod_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+static char *crypt_mod_pgp_findkeys (ADDRESS *adrlist)
 {
-  return pgp_gpgme_findkeys (to, cc, bcc);
+  return pgp_gpgme_findkeys (adrlist);
 }
 
 static BODY *crypt_mod_pgp_sign_message (BODY *a)
 {
   return pgp_gpgme_sign_message (a);
 }
 
 static int crypt_mod_pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempf)
diff --git a/crypt-mod-smime-classic.c b/crypt-mod-smime-classic.c
--- a/crypt-mod-smime-classic.c
+++ b/crypt-mod-smime-classic.c
@@ -41,19 +41,19 @@
 {
   return smime_decrypt_mime (a, b, c, d);
 }
 static int crypt_mod_smime_application_handler (BODY *m, STATE *s)
 {
   return smime_application_smime_handler (m, s);
 }
 
-static char *crypt_mod_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+static char *crypt_mod_smime_findkeys (ADDRESS *adrlist)
 {
-  return smime_findKeys (to, cc, bcc);
+  return smime_findKeys (adrlist);
 }
 
 static BODY *crypt_mod_smime_sign_message (BODY *a)
 {
   return smime_sign_message (a);
 }
 
 static int crypt_mod_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf)
diff --git a/crypt-mod-smime-gpgme.c b/crypt-mod-smime-gpgme.c
--- a/crypt-mod-smime-gpgme.c
+++ b/crypt-mod-smime-gpgme.c
@@ -50,19 +50,19 @@
   return smime_gpgme_decrypt_mime (a, b, c, d);
 }
 
 static int crypt_mod_smime_application_handler (BODY *m, STATE *s)
 {
   return smime_gpgme_application_handler (m, s);
 }
 
-static char *crypt_mod_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+static char *crypt_mod_smime_findkeys (ADDRESS *adrlist)
 {
-  return smime_gpgme_findkeys (to, cc, bcc);
+  return smime_gpgme_findkeys (adrlist);
 }
 
 static BODY *crypt_mod_smime_sign_message (BODY *a)
 {
   return smime_gpgme_sign_message (a);
 }
 
 static int crypt_mod_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf)
diff --git a/crypt-mod.h b/crypt-mod.h
--- a/crypt-mod.h
+++ b/crypt-mod.h
@@ -38,18 +38,17 @@
 typedef int (*crypt_func_encrypted_handler_t) (BODY *m, STATE *s);
 
 typedef void (*crypt_func_pgp_invoke_getkeys_t) (ADDRESS *addr);
 typedef int (*crypt_func_pgp_check_traditional_t) (FILE *fp, BODY *b,
                                                    int tagged_only);
 typedef BODY *(*crypt_func_pgp_traditional_encryptsign_t) (BODY *a, int flags,
                                                            char *keylist);
 typedef BODY *(*crypt_func_pgp_make_key_attachment_t) (char *tempf);
-typedef char *(*crypt_func_findkeys_t) (ADDRESS *to,
-                                        ADDRESS *cc, ADDRESS *bcc);
+typedef char *(*crypt_func_findkeys_t) (ADDRESS *adrlist);
 typedef BODY *(*crypt_func_sign_message_t) (BODY *a);
 typedef BODY *(*crypt_func_pgp_encrypt_message_t) (BODY *a, char *keylist,
                                                    int sign);
 typedef void (*crypt_func_pgp_invoke_import_t) (const char *fname);
 typedef int (*crypt_func_verify_one_t) (BODY *sigbdy, STATE *s,
                                         const char *tempf);
 typedef void (*crypt_func_pgp_extract_keys_from_attachment_list_t) 
                                            (FILE *fp, int tag, BODY *top);
diff --git a/crypt.c b/crypt.c
--- a/crypt.c
+++ b/crypt.c
@@ -704,46 +704,63 @@
   if ((WithCrypto & APPLICATION_PGP))
     unset_option (OPTDONTHANDLEPGPKEYS);
 }
 
 
 
 int crypt_get_keys (HEADER *msg, char **keylist)
 {
+  ADDRESS *adrlist = NULL, *last = NULL;
+  const char *fqdn = mutt_fqdn (1);
+
   /* Do a quick check to make sure that we can find all of the encryption
    * keys if the user has requested this service.
    */
 
   if (!WithCrypto)
     return 0;
 
   if ((WithCrypto & APPLICATION_PGP))
     set_option (OPTPGPCHECKTRUST);
 
+  last = rfc822_append (&adrlist, msg->env->to, 0);
+  last = rfc822_append (last ? &last : &adrlist, msg->env->cc, 0);
+  rfc822_append (last ? &last : &adrlist, msg->env->bcc, 0);
+
+  if (fqdn)
+    rfc822_qualify (adrlist, fqdn);
+  adrlist = mutt_remove_duplicates (adrlist);
+
   *keylist = NULL;
 
   if (msg->security & ENCRYPT)
   {
      if ((WithCrypto & APPLICATION_PGP)
          && (msg->security & APPLICATION_PGP))
      {
-       if ((*keylist = crypt_pgp_findkeys (msg->env->to, msg->env->cc,
-      			       msg->env->bcc)) == NULL)
+       if ((*keylist = crypt_pgp_findkeys (adrlist)) == NULL)
+       {
+           rfc822_free_address (&adrlist);
            return (-1);
+       }
        unset_option (OPTPGPCHECKTRUST);
      }
      if ((WithCrypto & APPLICATION_SMIME)
          && (msg->security & APPLICATION_SMIME))
      {
-       if ((*keylist = crypt_smime_findkeys (msg->env->to, msg->env->cc,
-      				             msg->env->bcc)) == NULL)
+       if ((*keylist = crypt_smime_findkeys (adrlist)) == NULL)
+       {
+           rfc822_free_address (&adrlist);
            return (-1);
+       }
      }
   }
+
+  rfc822_free_address (&adrlist);
     
   return (0);
 }
 
 
 
 static void crypt_fetch_signatures (BODY ***signatures, BODY *a, int *n)
 {
diff --git a/cryptglue.c b/cryptglue.c
--- a/cryptglue.c
+++ b/cryptglue.c
@@ -195,20 +195,20 @@
   if (CRYPT_MOD_CALL_CHECK (PGP, pgp_make_key_attachment))
     return (CRYPT_MOD_CALL (PGP, pgp_make_key_attachment)) (tempf);
 
   return NULL;
 }
 
 /* This routine attempts to find the keyids of the recipients of a
    message.  It returns NULL if any of the keys can not be found.  */
-char *crypt_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+char *crypt_pgp_findkeys (ADDRESS *adrlist)
 {
   if (CRYPT_MOD_CALL_CHECK (PGP, findkeys))
-    return (CRYPT_MOD_CALL (PGP, findkeys)) (to, cc, bcc);
+    return (CRYPT_MOD_CALL (PGP, findkeys)) (adrlist);
 
   return NULL;
 }
 
 /* Create a new body with a PGP signed message from A. */
 BODY *crypt_pgp_sign_message (BODY *a)
 {
   if (CRYPT_MOD_CALL_CHECK (PGP, sign_message))
@@ -329,20 +329,20 @@
   if (CRYPT_MOD_CALL_CHECK (SMIME, smime_verify_sender))
     return (CRYPT_MOD_CALL (SMIME, smime_verify_sender)) (h);
 
   return 1;
 }
 
 /* This routine attempts to find the keyids of the recipients of a
    message.  It returns NULL if any of the keys can not be found.  */
-char *crypt_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+char *crypt_smime_findkeys (ADDRESS *adrlist)
 {
   if (CRYPT_MOD_CALL_CHECK (SMIME, findkeys))
-    return (CRYPT_MOD_CALL (SMIME, findkeys)) (to, cc, bcc);
+    return (CRYPT_MOD_CALL (SMIME, findkeys)) (adrlist);
 
   return NULL;
 }
 
 /* fixme: Needs documentation. */
 BODY *crypt_smime_sign_message (BODY *a)
 {
   if (CRYPT_MOD_CALL_CHECK (SMIME, sign_message))
diff --git a/mutt_crypt.h b/mutt_crypt.h
--- a/mutt_crypt.h
+++ b/mutt_crypt.h
@@ -192,17 +192,17 @@
 /* Release the PGP key KPP (note, that we pass a pointer to it). */
 void crypt_pgp_free_key (pgp_key_t *kpp);
 
 /* Generate a PGP public key attachment. */
 BODY *crypt_pgp_make_key_attachment (char *tempf);
 
 /* This routine attempts to find the keyids of the recipients of a
    message.  It returns NULL if any of the keys can not be found.  */
-char *crypt_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+char *crypt_pgp_findkeys (ADDRESS *adrlist);
 
 /* Create a new body with a PGP signed message from A. */
 BODY *crypt_pgp_sign_message (BODY *a);
 
 /* Warning: A is no longer freed in this routine, you need to free it
    later.  This is necessary for $fcc_attach. */
 BODY *crypt_pgp_encrypt_message (BODY *a, char *keylist, int sign);
 
@@ -241,17 +241,17 @@
 /* Check that the sender matches. */
 int crypt_smime_verify_sender(HEADER *h);
 
 /* Ask for an SMIME key. */
 char *crypt_smime_ask_for_key (char *prompt, char *mailbox, short public);
 
 /* This routine attempts to find the keyids of the recipients of a
    message.  It returns NULL if any of the keys can not be found.  */
-char *crypt_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+char *crypt_smime_findkeys (ADDRESS *adrlist);
 
 /* fixme: Needs documentation. */
 BODY *crypt_smime_sign_message (BODY *a);
 
 /* fixme: needs documentation. */
 BODY *crypt_smime_build_smime_entity (BODY *a, char *certlist);
 
 /* Add a certificate and update index file (externally). */
diff --git a/pgp.c b/pgp.c
--- a/pgp.c
+++ b/pgp.c
@@ -1143,50 +1143,28 @@
       return 0;
   
   return 1;
 }
 
 /* This routine attempts to find the keyids of the recipients of a message.
  * It returns NULL if any of the keys can not be found.
  */
-char *pgp_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+char *pgp_findKeys (ADDRESS *adrlist)
 {
   char *keyID, *keylist = NULL;
   size_t keylist_size = 0;
   size_t keylist_used = 0;
-  ADDRESS *tmp = NULL, *addr = NULL;
-  ADDRESS **last = &tmp;
+  ADDRESS *addr = NULL;
   ADDRESS *p, *q;
-  int i;
   pgp_key_t k_info = NULL, key = NULL;
 
   const char *fqdn = mutt_fqdn (1);
 
-  for (i = 0; i < 3; i++) 
-  {
-    switch (i)
-    {
-      case 0: p = to; break;
-      case 1: p = cc; break;
-      case 2: p = bcc; break;
-      default: abort ();
-    }
-    
-    *last = rfc822_cpy_adr (p, 0);
-    while (*last)
-      last = &((*last)->next);
-  }
-
-  if (fqdn)
-    rfc822_qualify (tmp, fqdn);
-
-  tmp = mutt_remove_duplicates (tmp);
-  
-  for (p = tmp; p ; p = p->next)
+  for (p = adrlist; p ; p = p->next)
   {
     char buf[LONG_STRING];
 
     q = p;
     k_info = NULL;
 
     if ((keyID = mutt_crypt_hook (p)) != NULL)
     {
@@ -1209,34 +1187,32 @@
 	  q = addr;
 	}
 	else
 	  k_info = pgp_getkeybystr (keyID, KEYFLAG_CANENCRYPT, PGP_PUBRING);
       }
       else if (r == -1)
       {
 	FREE (&keylist);
-	rfc822_free_address (&tmp);
 	rfc822_free_address (&addr);
 	return NULL;
       }
     }
 
     if (k_info == NULL)
       pgp_invoke_getkeys (q);
 
     if (k_info == NULL && (k_info = pgp_getkeybyaddr (q, KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
     {
       snprintf (buf, sizeof (buf), _("Enter keyID for %s: "), q->mailbox);
 
       if ((key = pgp_ask_for_key (buf, q->mailbox,
 				  KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
       {
 	FREE (&keylist);
-	rfc822_free_address (&tmp);
 	rfc822_free_address (&addr);
 	return NULL;
       }
     }
     else
       key = k_info;
 
     keyID = pgp_keyid (key);
@@ -1247,17 +1223,16 @@
     sprintf (keylist + keylist_used, "%s0x%s", keylist_used ? " " : "",	/* __SPRINTF_CHECKED__ */
 	     keyID);
     keylist_used = mutt_strlen (keylist);
 
     pgp_free_key (&key);
     rfc822_free_address (&addr);
 
   }
-  rfc822_free_address (&tmp);
   return (keylist);
 }
 
 /* Warning: "a" is no longer freed in this routine, you need
  * to free it later.  This is necessary for $fcc_attach. */
 
 BODY *pgp_encrypt_message (BODY *a, char *keylist, int sign)
 {
diff --git a/pgp.h b/pgp.h
--- a/pgp.h
+++ b/pgp.h
@@ -44,17 +44,17 @@
 /* int pgp_string_matches_hint (const char *s, LIST * hints); */
 
 /* pgp_key_t gpg_get_candidates (struct pgp_vinfo *, pgp_ring_t, LIST *); */
 pgp_key_t pgp_ask_for_key (char *, char *, short, pgp_ring_t);
 pgp_key_t pgp_get_candidates (pgp_ring_t, LIST *);
 pgp_key_t pgp_getkeybyaddr (ADDRESS *, short, pgp_ring_t);
 pgp_key_t pgp_getkeybystr (char *, short, pgp_ring_t);
 
-char *pgp_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+char *pgp_findKeys (ADDRESS *adrlist);
 
 void pgp_forget_passphrase (void);
 int pgp_application_pgp_handler (BODY *, STATE *);
 int pgp_encrypted_handler (BODY *, STATE *);
 void pgp_extract_keys_from_attachment_list (FILE * fp, int tag, BODY * top);
 void pgp_void_passphrase (void);
 int pgp_valid_passphrase (void);
 
diff --git a/smime.c b/smime.c
--- a/smime.c
+++ b/smime.c
@@ -726,79 +726,49 @@
     rfc822_free_address (&t);
   }
 }
 
 /* This routine attempts to find the keyids of the recipients of a message.
  * It returns NULL if any of the keys can not be found.
  */
 
-char *smime_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+char *smime_findKeys (ADDRESS *adrlist)
 {
   char *keyID, *keylist = NULL;
   size_t keylist_size = 0;
   size_t keylist_used = 0;
-  ADDRESS *tmp = NULL, *addr = NULL;
-  ADDRESS **last = &tmp;
   ADDRESS *p, *q;
-  int i;
 
-  const char *fqdn = mutt_fqdn (1);
-  
-  for (i = 0; i < 3; i++)
-  {
-    switch (i)
-    {
-      case 0: p = to; break;
-      case 1: p = cc; break;
-      case 2: p = bcc; break;
-      default: abort ();
-    }
-    
-    *last = rfc822_cpy_adr (p, 0);
-    while (*last)
-      last = &((*last)->next);
-  }
-
-  if (fqdn)
-    rfc822_qualify (tmp, fqdn);
-
-  tmp = mutt_remove_duplicates (tmp);
-  
-  for (p = tmp; p ; p = p->next)
+  for (p = adrlist; p ; p = p->next)
   {
     char buf[LONG_STRING];
 
     q = p;
 
     if ((keyID = smime_get_field_from_db (q->mailbox, NULL, 1, 1)) == NULL)
     {
       snprintf(buf, sizeof(buf),
 	       _("Enter keyID for %s: "),
 	       q->mailbox);
       keyID = smime_ask_for_key(buf, q->mailbox, 1);
     }
     if(!keyID)
     {
       mutt_message (_("No (valid) certificate found for %s."), q->mailbox);
       FREE (&keylist);
-      rfc822_free_address (&tmp);
-      rfc822_free_address (&addr);
       return NULL;
     }
     
     keylist_size += mutt_strlen (keyID) + 2;
     safe_realloc (&keylist, keylist_size);
     sprintf (keylist + keylist_used, "%s\n", keyID);	/* __SPRINTF_CHECKED__ */
     keylist_used = mutt_strlen (keylist);
 
-    rfc822_free_address (&addr);
-
   }
-  rfc822_free_address (&tmp);
   return (keylist);
 }
 
 
 
 
 
 
diff --git a/smime.h b/smime.h
--- a/smime.h
+++ b/smime.h
@@ -45,17 +45,17 @@
 
 
 char* smime_get_field_from_db (char *, char *, short, short);
 
 void  smime_getkeys (ENVELOPE *);
 
 char* smime_ask_for_key (char *, char *, short);
 
-char *smime_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+char *smime_findKeys (ADDRESS *adrlist);
 
 void  smime_invoke_import (char *, char *);
 
 int smime_send_menu (HEADER *msg, int *redraw);
 
 #endif
 
 

Reply via email to