summaryrefslogtreecommitdiffstats
path: root/crypto/cms
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2008-04-06 15:41:25 +0000
committerDr. Stephen Henson <steve@openssl.org>2008-04-06 15:41:25 +0000
commitd5a37b029357b8ed8595f5cefc6654ac15302ae8 (patch)
treea2a3fa0a3ed0bc0e07ccb306b55fe6e72db8b601 /crypto/cms
parent68190507224b010fd6919f3643a1f64c766c3683 (diff)
Give consistent return value and add error code for duplicate certificates.
Diffstat (limited to 'crypto/cms')
-rw-r--r--crypto/cms/cms.h2
-rw-r--r--crypto/cms/cms_err.c4
-rw-r--r--crypto/cms/cms_lib.c7
3 files changed, 10 insertions, 3 deletions
diff --git a/crypto/cms/cms.h b/crypto/cms/cms.h
index 19fde29e93..ec48aabe0e 100644
--- a/crypto/cms/cms.h
+++ b/crypto/cms/cms.h
@@ -327,6 +327,7 @@ void ERR_load_CMS_strings(void);
/* Function codes. */
#define CMS_F_CHECK_CONTENT 99
+#define CMS_F_CMS_ADD0_CERT 164
#define CMS_F_CMS_ADD0_RECIPIENT_KEY 100
#define CMS_F_CMS_ADD1_RECEIPTREQUEST 158
#define CMS_F_CMS_ADD1_RECIPIENT_CERT 101
@@ -396,6 +397,7 @@ void ERR_load_CMS_strings(void);
#define CMS_R_ADD_SIGNER_ERROR 99
#define CMS_R_CERTIFICATE_HAS_NO_KEYID 160
#define CMS_R_CERTIFICATE_VERIFY_ERROR 100
+#define CMS_R_CERTIFICTATE_ALREADY_PRESENT 175
#define CMS_R_CIPHER_INITIALISATION_ERROR 101
#define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102
#define CMS_R_CMS_DATAFINAL_ERROR 103
diff --git a/crypto/cms/cms_err.c b/crypto/cms/cms_err.c
index 9c813e5db6..5680be3974 100644
--- a/crypto/cms/cms_err.c
+++ b/crypto/cms/cms_err.c
@@ -71,6 +71,7 @@
static ERR_STRING_DATA CMS_str_functs[]=
{
{ERR_FUNC(CMS_F_CHECK_CONTENT), "CHECK_CONTENT"},
+{ERR_FUNC(CMS_F_CMS_ADD0_CERT), "CMS_add0_cert"},
{ERR_FUNC(CMS_F_CMS_ADD0_RECIPIENT_KEY), "CMS_add0_recipient_key"},
{ERR_FUNC(CMS_F_CMS_ADD1_RECEIPTREQUEST), "CMS_add1_ReceiptRequest"},
{ERR_FUNC(CMS_F_CMS_ADD1_RECIPIENT_CERT), "CMS_add1_recipient_cert"},
@@ -131,7 +132,7 @@ static ERR_STRING_DATA CMS_str_functs[]=
{ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY), "CMS_SignerInfo_verify"},
{ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY_CERT), "CMS_SIGNERINFO_VERIFY_CERT"},
{ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT), "CMS_SignerInfo_verify_content"},
-{ERR_FUNC(CMS_F_CMS_SIGN_RECEIPT), "CMS_SIGN_RECEIPT"},
+{ERR_FUNC(CMS_F_CMS_SIGN_RECEIPT), "CMS_sign_receipt"},
{ERR_FUNC(CMS_F_CMS_STREAM), "CMS_stream"},
{ERR_FUNC(CMS_F_CMS_UNCOMPRESS), "CMS_uncompress"},
{ERR_FUNC(CMS_F_CMS_VERIFY), "CMS_verify"},
@@ -143,6 +144,7 @@ static ERR_STRING_DATA CMS_str_reasons[]=
{ERR_REASON(CMS_R_ADD_SIGNER_ERROR) ,"add signer error"},
{ERR_REASON(CMS_R_CERTIFICATE_HAS_NO_KEYID),"certificate has no keyid"},
{ERR_REASON(CMS_R_CERTIFICATE_VERIFY_ERROR),"certificate verify error"},
+{ERR_REASON(CMS_R_CERTIFICTATE_ALREADY_PRESENT),"certifictate already present"},
{ERR_REASON(CMS_R_CIPHER_INITIALISATION_ERROR),"cipher initialisation error"},
{ERR_REASON(CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR),"cipher parameter initialisation error"},
{ERR_REASON(CMS_R_CMS_DATAFINAL_ERROR) ,"cms datafinal error"},
diff --git a/crypto/cms/cms_lib.c b/crypto/cms/cms_lib.c
index 8c3854dfc9..a715fc3ad5 100644
--- a/crypto/cms/cms_lib.c
+++ b/crypto/cms/cms_lib.c
@@ -472,8 +472,11 @@ int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert)
if (cch->type == CMS_CERTCHOICE_CERT)
{
if (!X509_cmp(cch->d.certificate, cert))
- return -1;
-
+ {
+ CMSerr(CMS_F_CMS_ADD0_CERT,
+ CMS_R_CERTIFICTATE_ALREADY_PRESENT);
+ return 0;
+ }
}
}
cch = CMS_add0_CertificateChoices(cms);