diff options
-rw-r--r-- | mail/ChangeLog | 19 | ||||
-rw-r--r-- | mail/mail-config.c | 36 | ||||
-rw-r--r-- | mail/mail-config.h | 14 | ||||
-rw-r--r-- | mail/mail-crypto.c | 101 | ||||
-rw-r--r-- | mail/mail-crypto.h | 10 | ||||
-rw-r--r-- | mail/mail-format.c | 29 | ||||
-rw-r--r-- | mail/mail-preferences.c | 10 |
7 files changed, 80 insertions, 139 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 891fe7072d..fef5e09858 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,22 @@ +2002-06-26 Jeffrey Stedfast <fejj@ximian.com> + + * mail-config.c (config_read): Don't allow the pgp type to be + anything except NONE or GPG. + + * mail-preferences.c (mail_preferences_apply): Don't allow someone + to use anything other than GnuPG. + + * mail-crypto.c (mail_crypto_get_pgp_cipher_context): No need to + handle pgp5 or pgp6 types anymore since we are no longer + supporting them. Ding dong the witch is dead! + + * mail-format.c (handle_multipart_encrypted): Rewritten to use + camel_multipart_encrypted_decrypt. + + * mail-crypto.c (mail_crypto_pgp_mime_part_verify): Removed. + (mail_crypto_pgp_mime_part_encrypt): Removed. + (mail_crypto_pgp_mime_part_decrypt): Are we seeing a trend yet? + 2002-06-25 Jeffrey Stedfast <fejj@ximian.com> * mail-display.c (on_url_requested): Also handle https urls. diff --git a/mail/mail-config.c b/mail/mail-config.c index 4c2192cf40..ed9a9be18f 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -888,11 +888,17 @@ config_read (void) config->db, "/Mail/Prompts/confirm_goto_next_folder", TRUE, NULL); /* PGP/GPG */ - config->pgp_path = bonobo_config_get_string (config->db, - "/Mail/PGP/path", NULL); + config->pgp_path = bonobo_config_get_string (config->db, "/Mail/PGP/path", NULL); config->pgp_type = bonobo_config_get_long_with_default (config->db, - "/Mail/PGP/type", CAMEL_PGP_TYPE_NONE, NULL); + "/Mail/PGP/type", CONFIG_PGP_TYPE_NONE, NULL); + + /* we only support GnuPG now */ + if (config->pgp_type != CONFIG_PGP_TYPE_GPG) { + config->pgp_type = CONFIG_PGP_TYPE_NONE; + g_free (config->pgp_path); + config->pgp_path = NULL; + } /* HTTP images */ config->http_mode = bonobo_config_get_long_with_default (config->db, @@ -1760,13 +1766,13 @@ mail_config_set_goto_next_folder (gboolean value) struct { char *bin; char *version; - CamelPgpType type; + int type; } binaries[] = { - { "gpg", NULL, CAMEL_PGP_TYPE_GPG }, - { "pgp", "6.5.8", CAMEL_PGP_TYPE_PGP6 }, - { "pgp", "5.0", CAMEL_PGP_TYPE_PGP5 }, - { "pgp", "2.6", CAMEL_PGP_TYPE_PGP2 }, - { NULL, NULL, CAMEL_PGP_TYPE_NONE } + { "gpg", NULL, CONFIG_PGP_TYPE_GPG }, + { "pgp", "6.5.8", CONFIG_PGP_TYPE_PGP6 }, + { "pgp", "5.0", CONFIG_PGP_TYPE_PGP5 }, + { "pgp", "2.6", CONFIG_PGP_TYPE_PGP2 }, + { NULL, NULL, CONFIG_PGP_TYPE_NONE } }; @@ -1909,7 +1915,7 @@ pgpclose (PGPFILE *pgp) return -1; } -CamelPgpType +int mail_config_pgp_type_detect_from_path (const char *pgp) { const char *bin = g_basename (pgp); @@ -1918,7 +1924,7 @@ mail_config_pgp_type_detect_from_path (const char *pgp) /* make sure the file exists *and* is executable? */ if (stat (pgp, &st) == -1 || !(st.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR))) - return CAMEL_PGP_TYPE_NONE; + return CONFIG_PGP_TYPE_NONE; for (i = 0; binaries[i].bin; i++) { if (binaries[i].version) { @@ -1948,13 +1954,13 @@ mail_config_pgp_type_detect_from_path (const char *pgp) } } - return CAMEL_PGP_TYPE_NONE; + return CONFIG_PGP_TYPE_NONE; } static void auto_detect_pgp_variables (void) { - CamelPgpType type = CAMEL_PGP_TYPE_NONE; + int type = CONFIG_PGP_TYPE_NONE; const char *PATH, *path; char *pgp = NULL; @@ -2034,7 +2040,7 @@ auto_detect_pgp_variables (void) g_free (pgp); } -CamelPgpType +int mail_config_get_pgp_type (void) { if (!config->pgp_path || !config->pgp_type) @@ -2044,7 +2050,7 @@ mail_config_get_pgp_type (void) } void -mail_config_set_pgp_type (CamelPgpType pgp_type) +mail_config_set_pgp_type (int pgp_type) { config->pgp_type = pgp_type; } diff --git a/mail/mail-config.h b/mail/mail-config.h index 47c6a293c5..af65127dff 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -31,6 +31,14 @@ extern "C" { #pragma } #endif /* __cplusplus */ +enum { + CONFIG_PGP_TYPE_NONE, + CONFIG_PGP_TYPE_PGP2, /* no longer supported */ + CONFIG_PGP_TYPE_PGP5, /* no longer supported */ + CONFIG_PGP_TYPE_PGP6, /* no longer supported */ + CONFIG_PGP_TYPE_GPG +}; + typedef struct { int id; char *name; @@ -217,10 +225,10 @@ void mail_config_set_confirm_goto_next_folder (gboolean value); gboolean mail_config_get_goto_next_folder (void); void mail_config_set_goto_next_folder (gboolean value); -CamelPgpType mail_config_pgp_type_detect_from_path (const char *pgp); +int mail_config_pgp_type_detect_from_path (const char *pgp); -CamelPgpType mail_config_get_pgp_type (void); -void mail_config_set_pgp_type (CamelPgpType pgp_type); +int mail_config_get_pgp_type (void); +void mail_config_set_pgp_type (int pgp_type); const char *mail_config_get_pgp_path (void); void mail_config_set_pgp_path (const char *pgp_path); diff --git a/mail/mail-crypto.c b/mail/mail-crypto.c index 70cc620684..7eb604286b 100644 --- a/mail/mail-crypto.c +++ b/mail/mail-crypto.c @@ -36,7 +36,7 @@ * mail_crypto_get_pgp_cipher_context: * @account: Account that will be using this context * - * Constructs a new PGP (or GPG) cipher context with the appropriate + * Constructs a new GnuPG cipher context with the appropriate * options set based on the account provided. **/ CamelCipherContext * @@ -44,105 +44,15 @@ mail_crypto_get_pgp_cipher_context (const MailConfigAccount *account) { CamelCipherContext *cipher; - switch (mail_config_get_pgp_type ()) { - case CAMEL_PGP_TYPE_GPG: - cipher = camel_gpg_context_new (session, mail_config_get_pgp_path ()); - if (account) - camel_gpg_context_set_always_trust ((CamelGpgContext *) cipher, account->pgp_always_trust); - break; - case CAMEL_PGP_TYPE_PGP5: - case CAMEL_PGP_TYPE_PGP6: - cipher = camel_pgp_context_new (session, mail_config_get_pgp_type (), - mail_config_get_pgp_path ()); - break; - default: - cipher = NULL; - break; - } + cipher = camel_gpg_context_new (session, mail_config_get_pgp_path ()); + if (account) + camel_gpg_context_set_always_trust ((CamelGpgContext *) cipher, account->pgp_always_trust); return cipher; } /** - * mail_crypto_pgp_mime_part_verify: - * @mime_part: a multipart/signed MIME Part - * @ex: exception - * - * Returns a CamelCipherValidity on success or NULL on fail. - **/ -CamelCipherValidity * -mail_crypto_pgp_mime_part_verify (CamelMimePart *mime_part, CamelException *ex) -{ - CamelCipherValidity *valid = NULL; - CamelCipherContext *cipher; - - cipher = mail_crypto_get_pgp_cipher_context (NULL); - - if (cipher) { - valid = camel_pgp_mime_part_verify (cipher, mime_part, ex); - camel_object_unref (CAMEL_OBJECT (cipher)); - } else - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Could not create a PGP verification context.")); - - return valid; -} - - -/** - * mail_crypto_pgp_mime_part_encrypt: - * @mime_part: a MIME part that will be replaced by a pgp encrypted part - * @recipients: list of recipient PGP Key IDs - * @ex: exception which will be set if there are any errors. - * - * Constructs a PGP/MIME multipart in compliance with rfc2015 and - * replaces #mime_part with the generated multipart/encrypted. On failure, - * #ex will be set and #part will remain untouched. - **/ -void -mail_crypto_pgp_mime_part_encrypt (CamelMimePart **mime_part, GPtrArray *recipients, CamelException *ex) -{ - CamelCipherContext *cipher; - - cipher = mail_crypto_get_pgp_cipher_context (NULL); - - if (cipher) { - camel_pgp_mime_part_encrypt (cipher, mime_part, recipients, ex); - camel_object_unref (CAMEL_OBJECT (cipher)); - } else - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Could not create a PGP encryption context.")); -} - - -/** - * mail_crypto_pgp_mime_part_decrypt: - * @mime_part: a multipart/encrypted MIME Part - * @ex: exception - * - * Returns the decrypted MIME Part on success or NULL on fail. - **/ -CamelMimePart * -mail_crypto_pgp_mime_part_decrypt (CamelMimePart *mime_part, CamelException *ex) -{ - CamelCipherContext *cipher; - CamelMimePart *part = NULL; - - cipher = mail_crypto_get_pgp_cipher_context (NULL); - - if (cipher) { - part = camel_pgp_mime_part_decrypt (cipher, mime_part, ex); - camel_object_unref (CAMEL_OBJECT (cipher)); - } else - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Could not create a PGP decryption context.")); - - return part; -} - - -/** * mail_crypto_smime_sign: * @message: MIME message to sign * @userid: userid to sign with @@ -208,6 +118,7 @@ mail_crypto_smime_certsonly (CamelMimeMessage *message, const char *userid, return mesg; } + /** * mail_crypto_smime_encrypt: * @message: MIME message @@ -239,6 +150,7 @@ mail_crypto_smime_encrypt (CamelMimeMessage *message, const char *userid, return mesg; } + /** * mail_crypto_smime_envelope: * @message: MIME message @@ -270,6 +182,7 @@ mail_crypto_smime_envelope (CamelMimeMessage *message, const char *userid, return mesg; } + /** * mail_crypto_smime_decode: * @message: MIME message diff --git a/mail/mail-crypto.h b/mail/mail-crypto.h index f573625ce6..bc92e2a74b 100644 --- a/mail/mail-crypto.h +++ b/mail/mail-crypto.h @@ -34,18 +34,10 @@ extern "C" { #pragma } #endif /* __cplusplus */ + /* PGP/MIME convenience wrappers */ CamelCipherContext *mail_crypto_get_pgp_cipher_context (const MailConfigAccount *account); -CamelCipherValidity *mail_crypto_pgp_mime_part_verify (CamelMimePart *mime_part, - CamelException *ex); - -void mail_crypto_pgp_mime_part_encrypt (CamelMimePart **mime_part, - GPtrArray *recipients, - CamelException *ex); - -CamelMimePart *mail_crypto_pgp_mime_part_decrypt (CamelMimePart *mime_part, - CamelException *ex); /* S/MIME v3 convenience wrappers */ CamelMimeMessage *mail_crypto_smime_sign (CamelMimeMessage *message, const char *userid, diff --git a/mail/mail-format.c b/mail/mail-format.c index 4eeca49f44..39d6ec7f84 100644 --- a/mail/mail-format.c +++ b/mail/mail-format.c @@ -1742,20 +1742,24 @@ static gboolean handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) { - CamelDataWrapper *wrapper; CamelMimePart *mime_part; + CamelCipherContext *cipher; + CamelDataWrapper *wrapper; CamelException ex; - - wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - - g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE); + gboolean handled; /* Currently we only handle RFC2015-style PGP encryption. */ if (!camel_pgp_mime_is_rfc2015_encrypted (part)) return handle_multipart_mixed (part, mime_type, md, html, stream); + wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); + + g_assert (CAMEL_IS_MULTIPART (wrapper)); + camel_exception_init (&ex); - mime_part = mail_crypto_pgp_mime_part_decrypt (part, &ex); + cipher = mail_crypto_get_pgp_cipher_context (NULL); + mime_part = camel_multipart_encrypted_decrypt (part, cipher, &ex); + camel_object_unref (cipher); if (camel_exception_is_set (&ex)) { char *error; @@ -1767,15 +1771,12 @@ handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, camel_exception_clear (&ex); return TRUE; - } else { - /* replace the encrypted part with the decrypted part */ - camel_medium_set_content_object (CAMEL_MEDIUM (part), - camel_medium_get_content_object (CAMEL_MEDIUM (mime_part))); - camel_object_unref (CAMEL_OBJECT (mime_part)); - - /* and continue on our merry way... */ - return format_mime_part (part, md, html, stream); } + + handled = format_mime_part (mime_part, md, html, stream); + camel_object_unref (mime_part); + + return handled; } static gboolean diff --git a/mail/mail-preferences.c b/mail/mail-preferences.c index 949fefc7f4..99599df888 100644 --- a/mail/mail-preferences.c +++ b/mail/mail-preferences.c @@ -356,7 +356,7 @@ void mail_preferences_apply (MailPreferences *prefs) { GtkWidget *entry, *menu; - CamelPgpType type; + int pgp_type; char *string; guint32 rgb; int i, val; @@ -414,9 +414,11 @@ mail_preferences_apply (MailPreferences *prefs) entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (prefs->notify_sound_file)); string = gtk_entry_get_text (GTK_ENTRY (entry)); - type = string && *string ? mail_config_pgp_type_detect_from_path (string) : CAMEL_PGP_TYPE_NONE; - mail_config_set_pgp_path (string && *string ? string : NULL); - mail_config_set_pgp_type (type); + pgp_type = string && *string ? mail_config_pgp_type_detect_from_path (string) : CONFIG_PGP_TYPE_NONE; + if (pgp_type == CONFIG_PGP_TYPE_GPG) { + mail_config_set_pgp_path (string && *string ? string : NULL); + mail_config_set_pgp_type (pgp_type); + } /* Labels and Colours */ for (i = 0; i < 5; i++) { |