]> granicus.if.org Git - mutt/commitdiff
add DISPNONE to mean no preferred Content-Disposition; make pgp-signature parts DISPN...
authorMichael Elkins <me@sigpipe.org>
Sat, 11 Sep 2010 14:34:26 +0000 (07:34 -0700)
committerMichael Elkins <me@sigpipe.org>
Sat, 11 Sep 2010 14:34:26 +0000 (07:34 -0700)
crypt-gpgme.c
mime.h
pgp.c
recvattach.c
sendlib.c

index 98987640cef4ab7b54e039b3dbcacf96a0f2451b..ca69edd251381421a625a45883122fad76516b64 100644 (file)
@@ -918,7 +918,7 @@ static BODY *sign_message (BODY *a, int use_smime)
     {
       t->subtype = safe_strdup ("pgp-signature");
       t->use_disp = 0;
-      t->disposition = DISPINLINE;
+      t->disposition = DISPNONE;
       t->encoding = ENC7BIT;
     }
   t->filename = sigfile;
@@ -991,7 +991,7 @@ BODY *pgp_gpgme_encrypt_message (BODY *a, char *keylist, int sign)
   t->parts->next->encoding = ENC7BIT;
   t->parts->next->filename = outfile;
   t->parts->next->use_disp = 1;
-  t->parts->next->disposition = DISPINLINE;
+  t->parts->next->disposition = DISPATTACH;
   t->parts->next->unlink = 1; /* delete after sending the message */
   t->parts->next->d_filename = safe_strdup ("msg.asc"); /* non pgp/mime
                                                            can save */
diff --git a/mime.h b/mime.h
index a374f25aa6601cc5aa8293d8f5ed9d6ff1a27744..aec907221429a6a26d620e9e9fa84c2ea613d914 100644 (file)
--- a/mime.h
+++ b/mime.h
@@ -48,7 +48,8 @@ enum
 {
   DISPINLINE,
   DISPATTACH,
-  DISPFORMDATA
+  DISPFORMDATA,
+  DISPNONE /* no preferred disposition */
 };
 
 /* MIME encoding/decoding global vars */
diff --git a/pgp.c b/pgp.c
index a4208442d94d7582122bda41730f8f725a2d3e09..bf3640a6d24a5afcab78b946eeefc85f90350709 100644 (file)
--- a/pgp.c
+++ b/pgp.c
@@ -1126,7 +1126,7 @@ BODY *pgp_sign_message (BODY *a)
   t->subtype = safe_strdup ("pgp-signature");
   t->filename = safe_strdup (sigfile);
   t->use_disp = 0;
-  t->disposition = DISPINLINE;
+  t->disposition = DISPNONE;
   t->encoding = ENC7BIT;
   t->unlink = 1; /* ok to remove this file after sending. */
 
@@ -1378,7 +1378,7 @@ BODY *pgp_encrypt_message (BODY *a, char *keylist, int sign)
   t->parts->next->encoding = ENC7BIT;
   t->parts->next->filename = safe_strdup (tempfile);
   t->parts->next->use_disp = 1;
-  t->parts->next->disposition = DISPINLINE;
+  t->parts->next->disposition = DISPATTACH;
   t->parts->next->unlink = 1; /* delete after sending the message */
   t->parts->next->d_filename = safe_strdup ("msg.asc"); /* non pgp/mime can save */
 
@@ -1557,7 +1557,7 @@ BODY *pgp_traditional_encryptsign (BODY *a, int flags, char *keylist)
 
 #endif
 
-  b->disposition = DISPINLINE;
+  b->disposition = DISPNONE;
   b->unlink   = 1;
 
   b->noconv = 1;
index fc75b1bca5f54b7858a184e2fbb640ab2fec65f1..d9d87bccef5042228f5eb06afe2de50c83853906 100644 (file)
@@ -276,8 +276,17 @@ const char *mutt_attach_fmt (char *dest,
     case 'I':
       if (!optional)
       {
-         snprintf (dest, destlen, "%c",
-                 (aptr->content->disposition == DISPINLINE) ? 'I' : 'A');
+       const char dispchar[] = { 'I', 'A', 'F', '-' };
+       char ch;
+
+       if (aptr->content->disposition < sizeof(dispchar))
+         ch = dispchar[aptr->content->disposition];
+       else
+       {
+         dprint(1, (debugfile, "ERROR: invalid content-disposition %d\n", aptr->content->disposition));
+         ch = '!';
+       }
+       snprintf (dest, destlen, "%c", ch);
       }
       break;
     case 'm':
index b252e08807c36f3f556d6cdabf0fdf96d86f4d72..8297ad5d9ac18d3cc28b0fc1934506729b7dad6a 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -63,8 +63,6 @@
 
 extern char RFC822Specials[];
 
-#define DISPOSITION(X) X==DISPATTACH?"attachment":"inline"
-
 const char MimeSpecials[] = "@.,;:<>[]\\\"()?/= \t";
 
 char B64Chars[64] = {
@@ -355,34 +353,50 @@ int mutt_write_mime_header (BODY *a, FILE *f)
   if (a->description)
     fprintf(f, "Content-Description: %s\n", a->description);
 
-  fprintf (f, "Content-Disposition: %s", DISPOSITION (a->disposition));
-
-  if (a->use_disp)
+  if (a->disposition != DISPNONE)
   {
-    if(!(fn = a->d_filename))
-      fn = a->filename;
+    const char *dispstr[] = {
+      "inline",
+      "attachment",
+      "form-data"
+    };
 
-    if (fn)
+    if (a->disposition < sizeof(dispstr)/sizeof(char*))
     {
-      char *tmp;
+      fprintf (f, "Content-Disposition: %s", dispstr[a->disposition]);
 
-      /* Strip off the leading path... */
-      if ((t = strrchr (fn, '/')))
-       t++;
-      else
-       t = fn;
+      if (a->use_disp)
+      {
+       if (!(fn = a->d_filename))
+         fn = a->filename;
 
-      buffer[0] = 0;
-      tmp = safe_strdup (t);
-      encode = rfc2231_encode_string (&tmp);
-      rfc822_cat (buffer, sizeof (buffer), tmp, MimeSpecials);
-      FREE (&tmp);
-      fprintf (f, "; filename%s=%s", encode ? "*" : "", buffer);
+       if (fn)
+       {
+         char *tmp;
+
+         /* Strip off the leading path... */
+         if ((t = strrchr (fn, '/')))
+           t++;
+         else
+           t = fn;
+
+         buffer[0] = 0;
+         tmp = safe_strdup (t);
+         encode = rfc2231_encode_string (&tmp);
+         rfc822_cat (buffer, sizeof (buffer), tmp, MimeSpecials);
+         FREE (&tmp);
+         fprintf (f, "; filename%s=%s", encode ? "*" : "", buffer);
+       }
+      }
+
+      fputc ('\n', f);
+    }
+    else
+    {
+      dprint(1, (debugfile, "ERROR: invalid content-disposition %d\n", a->disposition));
     }
   }
 
-  fputc ('\n', f);
-
   if (a->encoding != ENC7BIT)
     fprintf(f, "Content-Transfer-Encoding: %s\n", ENCODING (a->encoding));