Update from HEAD.
authorDr. Stephen Henson <steve@openssl.org>
Sun, 1 May 2005 12:47:33 +0000 (12:47 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 1 May 2005 12:47:33 +0000 (12:47 +0000)
CHANGES
crypto/pkcs7/pk7_mime.c

diff --git a/CHANGES b/CHANGES
index 1a8cc26ada36a5ec940725bbadf934ad89e882e0..12116187d6fa160dad62108cfe2868eab26eed54 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.7g and 0.9.7h  [XX xxx XXXX]
 
+  *) Add support for smime-type MIME parameter in S/MIME messages which some
+     clients need.
+     [Steve Henson]
+
   *) New function BN_MONT_CTX_set_locked() to set montgomery parameters in
      a threadsafe manner. Modify rsa code to use new function and add calls
      to dsa and dh code (which had race conditions before).
index 5d2a97839d2b6155449caf3e77e1d2ea433d699c..927b88c3e7525b5c44cd8f3547a4570ebd0d8ca3 100644 (file)
@@ -3,7 +3,7 @@
  * project 1999.
  */
 /* ====================================================================
- * Copyright (c) 1999-2003 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -152,11 +152,12 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags)
 {
        char bound[33], c;
        int i;
-       char *mime_prefix, *mime_eol;
+       char *mime_prefix, *mime_eol, *msg_type=NULL;
        if (flags & PKCS7_NOOLDMIMETYPE)
                mime_prefix = "application/pkcs7-";
        else
                mime_prefix = "application/x-pkcs7-";
+
        if (flags & PKCS7_CRLFEOL)
                mime_eol = "\r\n";
        else
@@ -198,11 +199,30 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags)
                                                mime_eol, mime_eol);
                return 1;
        }
+
+       /* Determine smime-type header */
+
+       if (PKCS7_type_is_enveloped(p7))
+               msg_type = "enveloped-data";
+       else if (PKCS7_type_is_signed(p7))
+               {
+               /* If we have any signers it is signed-data othewise 
+                * certs-only.
+                */
+               STACK_OF(PKCS7_SIGNER_INFO) *sinfos;
+               sinfos = PKCS7_get_signer_info(p7);
+               if (sk_PKCS7_SIGNER_INFO_num(sinfos) > 0)
+                       msg_type = "signed-data";
+               else
+                       msg_type = "certs-only";
+               }
        /* MIME headers */
        BIO_printf(bio, "MIME-Version: 1.0%s", mime_eol);
        BIO_printf(bio, "Content-Disposition: attachment;");
        BIO_printf(bio, " filename=\"smime.p7m\"%s", mime_eol);
        BIO_printf(bio, "Content-Type: %smime;", mime_prefix);
+       if (msg_type)
+               BIO_printf(bio, " smime-type=%s;", msg_type);
        BIO_printf(bio, " name=\"smime.p7m\"%s", mime_eol);
        BIO_printf(bio, "Content-Transfer-Encoding: base64%s%s",
                                                mime_eol, mime_eol);