From: DINH V. H. <ho...@us...> - 2005-11-30 11:08:52
|
Update of /cvsroot/libetpan/libetpan/src/engine In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22984/src/engine Modified Files: mailprivacy.c mailprivacy_gnupg.c mailprivacy_smime.c mailprivacy_tools.c mailprivacy_tools.h Log Message: fixed signing Index: mailprivacy.c =================================================================== RCS file: /cvsroot/libetpan/libetpan/src/engine/mailprivacy.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- mailprivacy.c 21 Nov 2005 16:17:57 -0000 1.5 +++ mailprivacy.c 30 Nov 2005 11:08:43 -0000 1.6 @@ -671,7 +671,7 @@ if (r != MAIL_NO_ERROR) goto detach_alternative; - r = mailprivacy_get_part_from_file(privacy, 0, + r = mailprivacy_get_part_from_file(privacy, 0, 0, original_filename, &mime_copy); unlink(original_filename); if (r != MAIL_NO_ERROR) { Index: mailprivacy_gnupg.c =================================================================== RCS file: /cvsroot/libetpan/libetpan/src/engine/mailprivacy_gnupg.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- mailprivacy_gnupg.c 21 Nov 2005 16:17:57 -0000 1.6 +++ mailprivacy_gnupg.c 30 Nov 2005 11:08:43 -0000 1.7 @@ -575,7 +575,7 @@ /* building the decrypted part */ - r = mailprivacy_get_part_from_file(privacy, 1, + r = mailprivacy_get_part_from_file(privacy, 1, 0, decrypted_filename, &decrypted_mime); if (r == MAIL_NO_ERROR) { /* adds the decrypted part */ @@ -760,7 +760,7 @@ goto unlink_decrypted; } - r = mailprivacy_get_part_from_file(privacy, 1, + r = mailprivacy_get_part_from_file(privacy, 1, 0, signed_filename, &signed_msg_mime); if (r != MAIL_NO_ERROR) { mailprivacy_mime_clear(multipart); @@ -1155,7 +1155,7 @@ /* building the decrypted part */ - r = mailprivacy_get_part_from_file(privacy, 1, + r = mailprivacy_get_part_from_file(privacy, 1, 0, decrypted_filename, &decrypted_mime); if (r != MAIL_NO_ERROR) { mailprivacy_mime_clear(multipart); @@ -1591,7 +1591,7 @@ /* signed part */ - r = mailprivacy_get_part_from_file(privacy, 1, + r = mailprivacy_get_part_from_file(privacy, 1, 0, to_sign_filename, &to_sign_msg_mime); if (r != MAIL_NO_ERROR) { mailprivacy_mime_clear(multipart); Index: mailprivacy_smime.c =================================================================== RCS file: /cvsroot/libetpan/libetpan/src/engine/mailprivacy_smime.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- mailprivacy_smime.c 21 Nov 2005 16:17:57 -0000 1.10 +++ mailprivacy_smime.c 30 Nov 2005 11:08:43 -0000 1.11 @@ -375,7 +375,7 @@ /* building the decrypted part */ - r = mailprivacy_get_part_from_file(privacy, 1, + r = mailprivacy_get_part_from_file(privacy, 1, 0, decrypted_filename, &decrypted_mime); if (r == MAIL_NO_ERROR) { /* adds the decrypted part */ @@ -561,7 +561,7 @@ } } - r = mailprivacy_get_part_from_file(privacy, 1, + r = mailprivacy_get_part_from_file(privacy, 1, 0, stripped_filename, &stripped_mime); if (r != MAIL_NO_ERROR) { mailprivacy_mime_clear(multipart); @@ -582,7 +582,7 @@ unlink(description_filename); unlink(stripped_filename); - unlink(smime_filename); + // unlink(smime_filename); * result = multipart; @@ -715,7 +715,7 @@ res = MAIL_ERROR_INVAL; goto err; } - + /* part to sign */ /* encode quoted printable all text parts */ @@ -775,12 +775,12 @@ res = MAIL_ERROR_MEMORY; goto unlink_description; } - + snprintf(command, sizeof(command), "openssl smime -sign -passin fd:0 -in %s -signer %s -inkey %s", quoted_signed_filename, quoted_smime_cert, quoted_smime_key); - + r = smime_command_passphrase(privacy, msg, command, email, signature_filename, description_filename); switch (r) { @@ -793,7 +793,7 @@ break; case ERROR_SMIME_COMMAND: res = MAIL_ERROR_COMMAND; - goto unlink_signature; + goto unlink_description; case ERROR_SMIME_FILE: res = MAIL_ERROR_FILE; goto unlink_description; @@ -801,7 +801,7 @@ /* signature part */ - r = mailprivacy_get_part_from_file(privacy, 0, + r = mailprivacy_get_part_from_file(privacy, 0, 0, signature_filename, &signed_mime); if (r != MAIL_NO_ERROR) { res = r; @@ -810,8 +810,8 @@ strip_mime_headers(signed_mime); unlink(description_filename); - unlink(signature_filename); - unlink(signed_filename); + // unlink(signature_filename); + // unlink(signed_filename); * result = signed_mime; @@ -1082,7 +1082,7 @@ /* encrypted part */ - r = mailprivacy_get_part_from_file(privacy, 0, + r = mailprivacy_get_part_from_file(privacy, 0, 0, encrypted_filename, &encrypted_mime); if (r != MAIL_NO_ERROR) { res = r; Index: mailprivacy_tools.c =================================================================== RCS file: /cvsroot/libetpan/libetpan/src/engine/mailprivacy_tools.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- mailprivacy_tools.c 21 Nov 2005 16:17:57 -0000 1.5 +++ mailprivacy_tools.c 30 Nov 2005 11:08:43 -0000 1.6 @@ -200,7 +200,8 @@ static int mime_data_replace(struct mailprivacy * privacy, int encoding_type, - struct mailmime_data * data) + struct mailmime_data * data, + int reencode) { char filename[PATH_MAX]; FILE * f; @@ -222,29 +223,31 @@ } decoded = 0; - if (encoding_type != -1) { - char * content; - size_t content_len; - size_t cur_token; + if (reencode) { + if (encoding_type != -1) { + char * content; + size_t content_len; + size_t cur_token; - cur_token = 0; - r = mailmime_part_parse(data->dt_data.dt_text.dt_data, - data->dt_data.dt_text.dt_length, - &cur_token, encoding_type, &content, &content_len); + cur_token = 0; + r = mailmime_part_parse(data->dt_data.dt_text.dt_data, + data->dt_data.dt_text.dt_length, + &cur_token, encoding_type, &content, &content_len); - if (r == MAILIMF_NO_ERROR) { - /* write decoded */ - written = fwrite(content, 1, content_len, f); - if (written != content_len) { - fclose(f); - unlink(filename); - res = MAIL_ERROR_FILE; - goto err; - } - mmap_string_unref(content); + if (r == MAILIMF_NO_ERROR) { + /* write decoded */ + written = fwrite(content, 1, content_len, f); + if (written != content_len) { + fclose(f); + unlink(filename); + res = MAIL_ERROR_FILE; + goto err; + } + mmap_string_unref(content); - decoded = 1; - data->dt_encoded = 0; + decoded = 1; + data->dt_encoded = 0; + } } } @@ -285,7 +288,7 @@ */ static int recursive_replace_single_parts(struct mailprivacy * privacy, - struct mailmime * mime) + struct mailmime * mime, int reencode) { int r; int res; @@ -307,7 +310,8 @@ else encoding_type = -1; - r = mime_data_replace(privacy, encoding_type, mime->mm_data.mm_single); + r = mime_data_replace(privacy, encoding_type, + mime->mm_data.mm_single, reencode); if (r != MAIL_NO_ERROR) { res = r; goto err; @@ -318,7 +322,7 @@ case MAILMIME_MULTIPLE: if (mime->mm_data.mm_multipart.mm_preamble != NULL) { r = mime_data_replace(privacy, -1, - mime->mm_data.mm_multipart.mm_preamble); + mime->mm_data.mm_multipart.mm_preamble, reencode); if (r != MAIL_NO_ERROR) { res = r; goto err; @@ -327,7 +331,7 @@ if (mime->mm_data.mm_multipart.mm_epilogue != NULL) { r = mime_data_replace(privacy, -1, - mime->mm_data.mm_multipart.mm_epilogue); + mime->mm_data.mm_multipart.mm_epilogue, reencode); if (r != MAIL_NO_ERROR) { res = r; goto err; @@ -340,7 +344,7 @@ child = clist_content(cur); - r = recursive_replace_single_parts(privacy, child); + r = recursive_replace_single_parts(privacy, child, reencode); if (r != MAIL_NO_ERROR) { res = r; goto err; @@ -352,7 +356,7 @@ case MAILMIME_MESSAGE: if (mime->mm_data.mm_message.mm_msg_mime != NULL) { r = recursive_replace_single_parts(privacy, - mime->mm_data.mm_message.mm_msg_mime); + mime->mm_data.mm_message.mm_msg_mime, reencode); if (r != MAIL_NO_ERROR) { res = r; goto err; @@ -376,8 +380,8 @@ privacy can be set to NULL to disable privacy check. */ -int mailprivacy_get_mime(struct mailprivacy * privacy, - int check_privacy, +static int mailprivacy_get_mime(struct mailprivacy * privacy, + int check_privacy, int reencode, char * content, size_t content_len, struct mailmime ** result_mime) { @@ -435,7 +439,7 @@ */ mailprivacy_recursive_unregister_mime(privacy, mime); - r = recursive_replace_single_parts(privacy, mime); + r = recursive_replace_single_parts(privacy, mime, reencode); if (r != MAIL_NO_ERROR) { res = r; goto clear_mime; @@ -694,7 +698,7 @@ int mailprivacy_get_part_from_file(struct mailprivacy * privacy, - int check_security, char * filename, + int check_security, int reencode, char * filename, struct mailmime ** result_mime) { int fd; @@ -722,8 +726,9 @@ goto close; } + mime = NULL; /* check recursive parts if privacy is set */ - r = mailprivacy_get_mime(privacy, check_security, + r = mailprivacy_get_mime(privacy, check_security, reencode, mapping, stat_info.st_size, &mime); if (r != MAIL_NO_ERROR) { res = r; Index: mailprivacy_tools.h =================================================================== RCS file: /cvsroot/libetpan/libetpan/src/engine/mailprivacy_tools.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- mailprivacy_tools.h 21 Nov 2005 16:17:57 -0000 1.4 +++ mailprivacy_tools.h 30 Nov 2005 11:08:43 -0000 1.5 @@ -48,11 +48,6 @@ int mailprivacy_get_tmp_filename(struct mailprivacy * privacy, char * filename, size_t size); -int mailprivacy_get_mime(struct mailprivacy * privacy, - int check_privacy, - char * content, size_t content_len, - struct mailmime ** result_mime); - struct mailmime * mailprivacy_new_file_part(struct mailprivacy * privacy, char * filename, @@ -66,7 +61,7 @@ mailmessage * msg, struct mailmime * mime); int mailprivacy_get_part_from_file(struct mailprivacy * privacy, - int check_privacy, + int check_privacy, int reencode, char * filename, struct mailmime ** result_mime); |