From: DINH V. H. <ho...@us...> - 2005-08-15 11:08:49
|
Update of /cvsroot/libetpan/libetpan/src/engine In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31463/src/engine Modified Files: mailprivacy_smime.c Log Message: SASL at higher level, support for S/MIME 2 (signed messages) Index: mailprivacy_smime.c =================================================================== RCS file: /cvsroot/libetpan/libetpan/src/engine/mailprivacy_smime.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- mailprivacy_smime.c 13 Aug 2005 14:59:42 -0000 1.7 +++ mailprivacy_smime.c 15 Aug 2005 11:08:41 -0000 1.8 @@ -72,21 +72,44 @@ static int smime_is_signed(struct mailmime * mime) { if (mime->mm_content_type != NULL) { - clistiter * cur; - - for(cur = clist_begin(mime->mm_content_type->ct_parameters) ; cur != NULL ; - cur = clist_next(cur)) { - struct mailmime_parameter * param; - - param = cur->data; - - if ((strcasecmp(param->pa_name, "protocol") == 0) && - ((strcasecmp(param->pa_value, "application/x-pkcs7-signature") == 0) || - (strcasecmp(param->pa_value, "application/pkcs7-signature") == 0))) - return 1; + if ((strcasecmp(mime->mm_content_type->ct_subtype, "x-pkcs7-mime") == 0) || + (strcasecmp(mime->mm_content_type->ct_subtype, "pkcs7-mime") == 0)) { + clistiter * cur; + + for(cur = clist_begin(mime->mm_content_type->ct_parameters) ; + cur != NULL ; + cur = clist_next(cur)) { + struct mailmime_parameter * param; + + param = cur->data; + + if ((strcasecmp(param->pa_name, "smime-type") == 0) && + (strcasecmp(param->pa_value, "signed-data") == 0)) + return 1; + } + + return 0; + } + else { + clistiter * cur; + + for(cur = clist_begin(mime->mm_content_type->ct_parameters) ; + cur != NULL ; + cur = clist_next(cur)) { + struct mailmime_parameter * param; + + param = cur->data; + + if ((strcasecmp(param->pa_name, "protocol") == 0) && + ((strcasecmp(param->pa_value, + "application/x-pkcs7-signature") == 0) || + (strcasecmp(param->pa_value, + "application/pkcs7-signature") == 0))) + return 1; + } } } - + return 0; } @@ -94,10 +117,25 @@ { if (mime->mm_content_type != NULL) { if ((strcasecmp(mime->mm_content_type->ct_subtype, "x-pkcs7-mime") == 0) || - (strcasecmp(mime->mm_content_type->ct_subtype, "pkcs7-mime") == 0)) + (strcasecmp(mime->mm_content_type->ct_subtype, "pkcs7-mime") == 0)) { + clistiter * cur; + + for(cur = clist_begin(mime->mm_content_type->ct_parameters) ; + cur != NULL ; + cur = clist_next(cur)) { + struct mailmime_parameter * param; + + param = cur->data; + + if ((strcasecmp(param->pa_name, "smime-type") == 0) && + (strcasecmp(param->pa_value, "signed-data") == 0)) + return 0; + } + return 1; + } } - + return 0; } @@ -652,7 +690,7 @@ return smime_is_signed(mime); case MAILMIME_SINGLE: - return smime_is_encrypted(mime); + return smime_is_encrypted(mime) || smime_is_signed(mime); } return 0; @@ -683,6 +721,8 @@ r = MAIL_ERROR_INVAL; if (smime_is_encrypted(mime)) r = smime_decrypt(privacy, msg, mime, &alternative_mime); + else if (smime_is_signed(mime)) + r = smime_verify(privacy, msg, mime, &alternative_mime); if (r != MAIL_NO_ERROR) return r; |