aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog19
-rw-r--r--mail/mail-config.c36
-rw-r--r--mail/mail-config.h14
-rw-r--r--mail/mail-crypto.c101
-rw-r--r--mail/mail-crypto.h10
-rw-r--r--mail/mail-format.c29
-rw-r--r--mail/mail-preferences.c10
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++) {