diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2001-06-03 05:07:44 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-06-03 05:07:44 +0800 |
commit | f29afac4e61153c7304d4d1c92064c968dda32a3 (patch) | |
tree | 78d8e58d6403d59d1e9a4ebe80b29d912cb495a1 /composer | |
parent | 2ceef66cce57e4655763dbc984dd4e849fc3028a (diff) | |
download | gsoc2013-evolution-f29afac4e61153c7304d4d1c92064c968dda32a3.tar.gz gsoc2013-evolution-f29afac4e61153c7304d4d1c92064c968dda32a3.tar.zst gsoc2013-evolution-f29afac4e61153c7304d4d1c92064c968dda32a3.zip |
If user is trying to sign his/her message, try first to use the key that
2001-06-01 Jeffrey Stedfast <fejj@ximian.com>
* e-msg-composer.c (build_message): If user is trying to sign
his/her message, try first to use the key that they might have
provided in their account settings. If that was never set, default
to their email address. Also respect their config option to
encrypt-to-self.
svn path=/trunk/; revision=10103
Diffstat (limited to 'composer')
-rw-r--r-- | composer/ChangeLog | 8 | ||||
-rw-r--r-- | composer/e-msg-composer.c | 107 |
2 files changed, 86 insertions, 29 deletions
diff --git a/composer/ChangeLog b/composer/ChangeLog index 5a9223d7ea..cbffb77b90 100644 --- a/composer/ChangeLog +++ b/composer/ChangeLog @@ -1,3 +1,11 @@ +2001-06-01 Jeffrey Stedfast <fejj@ximian.com> + + * e-msg-composer.c (build_message): If user is trying to sign + his/her message, try first to use the key that they might have + provided in their account settings. If that was never set, default + to their email address. Also respect their config option to + encrypt-to-self. + 2001-05-31 Jeffrey Stedfast <fejj@ximian.com> * e-msg-composer.c (build_message): Oops. Fix a few compile problems. diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 4011dd316e..ec867c8da2 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -268,10 +268,10 @@ build_message (EMsgComposer *composer) CamelMimePart *part; CamelException ex; int i; - + if (composer->persist_stream_interface == CORBA_OBJECT_NIL) return NULL; - + new = camel_mime_message_new (); e_msg_composer_hdrs_to_message (hdrs, new); for (i = 0; i < composer->extra_hdr_names->len; i++) { @@ -279,7 +279,7 @@ build_message (EMsgComposer *composer) composer->extra_hdr_names->pdata[i], composer->extra_hdr_values->pdata[i]); } - + data = get_text (composer->persist_stream_interface, "text/plain"); if (!data) { /* The component has probably died */ @@ -296,7 +296,7 @@ build_message (EMsgComposer *composer) camel_object_unref (CAMEL_OBJECT (stream)); camel_data_wrapper_set_mime_type_field (plain, type); header_content_type_unref (type); - + if (composer->send_html) { data = get_text (composer->persist_stream_interface, "text/html"); if (!data) { @@ -310,45 +310,45 @@ build_message (EMsgComposer *composer) camel_data_wrapper_construct_from_stream (html, stream); camel_object_unref (CAMEL_OBJECT (stream)); camel_data_wrapper_set_mime_type (html, "text/html; charset=utf-8"); - + /* Build the multipart/alternative */ body = camel_multipart_new (); camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (body), "multipart/alternative"); camel_multipart_set_boundary (body, NULL); - + part = camel_mime_part_new (); camel_medium_set_content_object (CAMEL_MEDIUM (part), plain); camel_object_unref (CAMEL_OBJECT (plain)); camel_mime_part_set_encoding (part, plain_encoding); camel_multipart_add_part (body, part); camel_object_unref (CAMEL_OBJECT (part)); - + part = camel_mime_part_new (); camel_medium_set_content_object (CAMEL_MEDIUM (part), html); camel_object_unref (CAMEL_OBJECT (html)); camel_multipart_add_part (body, part); camel_object_unref (CAMEL_OBJECT (part)); - + /* If there are inlined images, construct a * multipart/related containing the * multipart/alternative and the images. */ if (g_hash_table_size (composer->inline_images)) { CamelMultipart *html_with_images; - + html_with_images = camel_multipart_new (); camel_data_wrapper_set_mime_type ( CAMEL_DATA_WRAPPER (html_with_images), "multipart/related; type=\"multipart/alternative\""); camel_multipart_set_boundary (html_with_images, NULL); - + part = camel_mime_part_new (); camel_medium_set_content_object (CAMEL_MEDIUM (part), CAMEL_DATA_WRAPPER (body)); camel_object_unref (CAMEL_OBJECT (body)); camel_multipart_add_part (html_with_images, part); camel_object_unref (CAMEL_OBJECT (part)); - + add_inlined_images (composer, html_with_images); current = CAMEL_DATA_WRAPPER (html_with_images); } else @@ -358,10 +358,10 @@ build_message (EMsgComposer *composer) if (e_msg_composer_attachment_bar_get_num_attachments (attachment_bar)) { CamelMultipart *multipart = camel_multipart_new (); - + /* Generate a random boundary. */ camel_multipart_set_boundary (multipart, NULL); - + part = camel_mime_part_new (); camel_medium_set_content_object (CAMEL_MEDIUM (part), current); if (current == plain) @@ -369,9 +369,9 @@ build_message (EMsgComposer *composer) camel_object_unref (CAMEL_OBJECT (current)); camel_multipart_add_part (multipart, part); camel_object_unref (CAMEL_OBJECT (part)); - + e_msg_composer_attachment_bar_to_multipart (attachment_bar, multipart); - + current = CAMEL_DATA_WRAPPER (multipart); } @@ -383,15 +383,24 @@ build_message (EMsgComposer *composer) camel_object_unref (CAMEL_OBJECT (current)); if (composer->pgp_sign) { - /* FIXME: should use the PGP key id rather than email address */ + CamelInternetAddress *from = NULL; const char *pgpid; - CamelInternetAddress *from; camel_exception_init (&ex); - from = e_msg_composer_hdrs_get_from (E_MSG_COMPOSER_HDRS (composer->hdrs)); - camel_internet_address_get (from, 0, NULL, &pgpid); + + if (hdrs->account && hdrs->account->pgp_key) { + pgpid = 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); + } + mail_crypto_pgp_mime_part_sign (&part, pgpid, CAMEL_CIPHER_HASH_SHA1, &ex); - camel_object_unref (CAMEL_OBJECT (from)); + + if (from) + camel_object_unref (CAMEL_OBJECT (from)); + if (camel_exception_is_set (&ex)) goto exception; } @@ -406,6 +415,24 @@ build_message (EMsgComposer *composer) 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->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)); + } + addr = camel_mime_message_get_recipients (new, CAMEL_RECIPIENT_TYPE_TO); len = camel_address_length (CAMEL_ADDRESS (addr)); for (i = 0; i < len; i++) { @@ -447,18 +474,24 @@ build_message (EMsgComposer *composer) #ifdef HAVE_NSS if (composer->smime_sign) { - /* FIXME: should use the S/MIME signature certificate email address */ + CamelInternetAddress *from = NULL; CamelMimeMessage *smime_mesg; - CamelInternetAddress *from; - const char *address; + const char *certname; camel_exception_init (&ex); - from = e_msg_composer_hdrs_get_from (E_MSG_COMPOSER_HDRS (composer->hdrs)); - camel_internet_address_get (from, 0, NULL, &address); - smime_mesg = mail_crypto_smime_sign (new, address, TRUE, TRUE, &ex); + if (hdrs->account && hdrs->account->smime_key) { + certname = hdrs->account->smime_key; + } else { + /* time for plan b */ + from = e_msg_composer_hdrs_get_from (hdrs); + camel_internet_address_get (from, 0, NULL, &certname); + } - camel_object_unref (CAMEL_OBJECT (from)); + smime_mesg = mail_crypto_smime_sign (new, certname, TRUE, TRUE, &ex); + + if (from) + camel_object_unref (CAMEL_OBJECT (from)); if (camel_exception_is_set (&ex)) goto exception; @@ -469,8 +502,8 @@ build_message (EMsgComposer *composer) if (composer->smime_encrypt) { /* FIXME: we should try to get the preferred cert "nickname" for each recipient */ - const CamelInternetAddress *addr; - CamelInternetAddress *from; + const CamelInternetAddress *addr = NULL; + CamelInternetAddress *from = NULL; CamelMimeMessage *smime_mesg; const char *address; GPtrArray *recipients; @@ -479,6 +512,22 @@ build_message (EMsgComposer *composer) camel_exception_init (&ex); recipients = g_ptr_array_new (); + /* check to see if we should encrypt to self */ + if (hdrs->account && hdrs->account->smime_encrypt_to_self) { + if (hdrs->account->smime_key) { + address = hdrs->account->smime_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 (addr)); + } + addr = camel_mime_message_get_recipients (new, CAMEL_RECIPIENT_TYPE_TO); len = camel_address_length (CAMEL_ADDRESS (addr)); for (i = 0; i < len; i++) { |