Support for smime-type MIME parameter.

This commit is contained in:
Dr. Stephen Henson 2005-05-01 12:46:57 +00:00
parent 081057c3ff
commit 05338b58ce
2 changed files with 26 additions and 2 deletions

View File

@ -794,6 +794,10 @@
Changes between 0.9.7g and 0.9.7h [XX xxx XXXX] 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 *) 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 a threadsafe manner. Modify rsa code to use new function and add calls
to dsa and dh code (which had race conditions before). to dsa and dh code (which had race conditions before).

View File

@ -3,7 +3,7 @@
* project. * 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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * 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; char bound[33], c;
int i; int i;
char *mime_prefix, *mime_eol; char *mime_prefix, *mime_eol, *msg_type=NULL;
if (flags & PKCS7_NOOLDMIMETYPE) if (flags & PKCS7_NOOLDMIMETYPE)
mime_prefix = "application/pkcs7-"; mime_prefix = "application/pkcs7-";
else else
mime_prefix = "application/x-pkcs7-"; mime_prefix = "application/x-pkcs7-";
if (flags & PKCS7_CRLFEOL) if (flags & PKCS7_CRLFEOL)
mime_eol = "\r\n"; mime_eol = "\r\n";
else else
@ -196,11 +197,30 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags)
mime_eol, mime_eol); mime_eol, mime_eol);
return 1; 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 */ /* MIME headers */
BIO_printf(bio, "MIME-Version: 1.0%s", mime_eol); BIO_printf(bio, "MIME-Version: 1.0%s", mime_eol);
BIO_printf(bio, "Content-Disposition: attachment;"); BIO_printf(bio, "Content-Disposition: attachment;");
BIO_printf(bio, " filename=\"smime.p7m\"%s", mime_eol); BIO_printf(bio, " filename=\"smime.p7m\"%s", mime_eol);
BIO_printf(bio, "Content-Type: %smime;", mime_prefix); 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, " name=\"smime.p7m\"%s", mime_eol);
BIO_printf(bio, "Content-Transfer-Encoding: base64%s%s", BIO_printf(bio, "Content-Transfer-Encoding: base64%s%s",
mime_eol, mime_eol); mime_eol, mime_eol);