diff options
-rw-r--r-- | composer/ChangeLog | 7 | ||||
-rw-r--r-- | composer/e-msg-composer.c | 80 |
2 files changed, 56 insertions, 31 deletions
diff --git a/composer/ChangeLog b/composer/ChangeLog index cb16f583a1..c8d2c3307f 100644 --- a/composer/ChangeLog +++ b/composer/ChangeLog @@ -1,3 +1,10 @@ +2002-06-26 Jeffrey Stedfast <fejj@ximian.com> + + * e-msg-composer.c (build_message): Use the new + CamelMultipartEncrypted class to do our encryption work for us. We + also need to always get the user's userid before encrypting since + pgp/gpg need that. + 2002-06-25 Jeffrey Stedfast <fejj@ximian.com> * e-msg-composer.c (build_message): Use diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index bcfa321e19..bc8ce1856b 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -88,7 +88,6 @@ #include "camel/camel.h" #include "camel/camel-charset-map.h" #include "camel/camel-session.h" -#include "camel/camel-multipart-signed.h" #include "mail/mail.h" #include "mail/mail-crypto.h" @@ -496,9 +495,9 @@ build_message (EMsgComposer *composer) if (composer->pgp_sign) { CamelInternetAddress *from = NULL; - const char *pgpid; CamelMultipartSigned *mps; CamelCipherContext *cipher; + const char *userid; cipher = mail_crypto_get_pgp_cipher_context (hdrs->account); if (cipher == NULL) { @@ -508,26 +507,26 @@ build_message (EMsgComposer *composer) } if (hdrs->account && hdrs->account->pgp_key && *hdrs->account->pgp_key) { - pgpid = hdrs->account->pgp_key; + userid = hdrs->account->pgp_key; } else { /* time for plan b */ from = e_msg_composer_hdrs_get_from (hdrs); - camel_internet_address_get (from, 0, NULL, &pgpid); + camel_internet_address_get (from, 0, NULL, &userid); } mps = camel_multipart_signed_new (); - camel_multipart_signed_sign (mps, cipher, part, pgpid, CAMEL_CIPHER_HASH_SHA1, &ex); + camel_multipart_signed_sign (mps, cipher, part, userid, CAMEL_CIPHER_HASH_SHA1, &ex); + camel_object_unref (cipher); if (from) - camel_object_unref (CAMEL_OBJECT (from)); + camel_object_unref (from); /* if cancelled, just leave part as is, otherwise, replace content with the multipart */ if (camel_exception_is_set (&ex)) { if (camel_exception_get_id (&ex) == CAMEL_EXCEPTION_USER_CANCEL) { camel_exception_clear (&ex); } else { - camel_object_unref (CAMEL_OBJECT (mps)); - camel_object_unref (CAMEL_OBJECT (cipher)); + camel_object_unref (mps); goto exception; } } else { @@ -535,38 +534,37 @@ build_message (EMsgComposer *composer) camel_medium_set_content_object (CAMEL_MEDIUM (part), (CamelDataWrapper *) mps); } - camel_object_unref (CAMEL_OBJECT (mps)); - camel_object_unref (CAMEL_OBJECT (cipher)); + camel_object_unref (mps); } if (composer->pgp_encrypt) { /* FIXME: recipients should be an array of key ids rather than email addresses */ + CamelInternetAddress *from = NULL; const CamelInternetAddress *addr; - const char *address; + CamelMultipartEncrypted *mpe; + CamelCipherContext *cipher; GPtrArray *recipients; + const char *address; + const char *userid; int i, len; camel_exception_init (&ex); recipients = g_ptr_array_new (); - /* check to see if we should encrypt to self */ - if (hdrs->account && hdrs->account->pgp_encrypt_to_self) { - CamelInternetAddress *from = NULL; - - if (hdrs->account && hdrs->account->pgp_key && *hdrs->account->pgp_key) { - address = hdrs->account->pgp_key; - } else { - /* time for plan b */ - from = e_msg_composer_hdrs_get_from (hdrs); - camel_internet_address_get (from, 0, NULL, &address); - } - - g_ptr_array_add (recipients, g_strdup (address)); - - if (from) - camel_object_unref (CAMEL_OBJECT (from)); + /* get our userid */ + userid = NULL; + if (hdrs->account && hdrs->account->pgp_key && *hdrs->account->pgp_key) { + userid = hdrs->account->pgp_key; + } else { + /* time for plan b */ + from = e_msg_composer_hdrs_get_from (hdrs); + camel_internet_address_get (from, 0, NULL, &userid); } + /* check to see if we should encrypt to self */ + if (hdrs->account && hdrs->account->pgp_encrypt_to_self && userid) + g_ptr_array_add (recipients, g_strdup (userid)); + addr = camel_mime_message_get_recipients (new, CAMEL_RECIPIENT_TYPE_TO); len = camel_address_length (CAMEL_ADDRESS (addr)); for (i = 0; i < len; i++) { @@ -588,14 +586,34 @@ build_message (EMsgComposer *composer) g_ptr_array_add (recipients, g_strdup (address)); } - mail_crypto_pgp_mime_part_encrypt (&part, recipients, &ex); + mpe = camel_multipart_encrypted_new (); + cipher = mail_crypto_get_pgp_cipher_context (hdrs->account); + + camel_multipart_encrypted_encrypt (mpe, part, cipher, userid, recipients, &ex); + + camel_object_unref (cipher); + + if (from) + camel_object_unref (from); + for (i = 0; i < recipients->len; i++) g_free (recipients->pdata[i]); g_ptr_array_free (recipients, TRUE); - if (camel_exception_is_set (&ex) - && camel_exception_get_id (&ex) != CAMEL_EXCEPTION_USER_CANCEL) - goto exception; + /* if cancelled, just leave part as is, otherwise, replace content with the multipart */ + if (camel_exception_is_set (&ex)) { + if (camel_exception_get_id (&ex) == CAMEL_EXCEPTION_USER_CANCEL) { + camel_exception_clear (&ex); + } else { + camel_object_unref (mpe); + goto exception; + } + } else { + camel_multipart_set_boundary (CAMEL_MULTIPART (mpe), NULL); + camel_medium_set_content_object (CAMEL_MEDIUM (part), (CamelDataWrapper *) mpe); + } + + camel_object_unref (mpe); } current = camel_medium_get_content_object (CAMEL_MEDIUM (part)); |