]> granicus.if.org Git - neomutt/commitdiff
Convert classic s/mime to space delimit findKeys output.
authorKevin McCarthy <kevin@8t8.us>
Mon, 29 May 2017 18:48:41 +0000 (11:48 -0700)
committerRichard Russon <rich@flatcap.org>
Thu, 1 Jun 2017 14:27:01 +0000 (15:27 +0100)
Unlike gpgme and classic pgp, smime used a "cert\ncert\n" pattern.
Convert to use a space-delimited format, so the self-encrypt option
code can be uniform across pgp, s/mime, and gpgme.

ncrypt/smime.c

index eeb950b61c13bf16111eff0dfb887182eddb57ac..9e604adaaeb9b4a01e2fca9e596c2606d934ca47 100644 (file)
@@ -869,7 +869,7 @@ char *smime_find_keys(struct Address *adrlist, int oppenc_mode)
     keyID = key->hash;
     keylist_size += mutt_strlen(keyID) + 2;
     safe_realloc(&keylist, keylist_size);
-    sprintf(keylist + keylist_used, "%s\n", keyID);
+    sprintf(keylist + keylist_used, "%s%s", keylist_used ? " " : "", keyID);
     keylist_used = mutt_strlen(keylist);
 
     smime_free_key(&key);
@@ -1287,10 +1287,10 @@ struct Body *smime_build_smime_entity(struct Body *a, char *certlist)
   char buf[LONG_STRING], certfile[LONG_STRING];
   char tempfile[_POSIX_PATH_MAX], smimeerrfile[_POSIX_PATH_MAX];
   char smimeinfile[_POSIX_PATH_MAX];
-  char *cert_start = certlist, *cert_end = certlist;
+  char *cert_start, *cert_end;
   FILE *smimein = NULL, *smimeerr = NULL, *fpout = NULL, *fptmp = NULL;
   struct Body *t = NULL;
-  int err = 0, empty;
+  int err = 0, empty, off;
   pid_t thepid;
 
   mutt_mktemp(tempfile, sizeof(tempfile));
@@ -1321,19 +1321,17 @@ struct Body *smime_build_smime_entity(struct Body *a, char *certlist)
   }
 
   *certfile = '\0';
-  while (1)
+  for (cert_start = certlist; cert_start; cert_start = cert_end)
   {
-    int off = mutt_strlen(certfile);
-    while (*++cert_end && *cert_end != '\n')
-      ;
-    if (!*cert_end)
-      break;
-    *cert_end = '\0';
-    snprintf(certfile + off, sizeof(certfile) - off, " %s/%s",
-             NONULL(SmimeCertificates), cert_start);
-    *cert_end = '\n';
-    cert_start = cert_end;
-    cert_start++;
+    if ((cert_end = strchr(cert_start, ' ')))
+      *cert_end = '\0';
+    if (*cert_start)
+    {
+      off = mutt_strlen(certfile);
+      snprintf(certfile + off, sizeof(certfile) - off, "%s%s/%s", off ? " " : "", NONULL(SmimeCertificates), cert_start);
+    }
+    if (cert_end)
+      *cert_end++ = ' ';
   }
 
   /* write a MIME entity */