Don't allow the pgp type to be anything except NONE or GPG.
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? svn path=/trunk/; revision=17301
This commit is contained in:
committed by
Jeffrey Stedfast
parent
26fb05c8cb
commit
47400a031c
@ -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.
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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,104 +44,14 @@ 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
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user