Commit 05338b58 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Support for smime-type MIME parameter.

parent 081057c3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -794,6 +794,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).
+22 −2
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
 * project.
 */
/* ====================================================================
 * 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
@@ -150,11 +150,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
@@ -196,11 +197,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);