From: Colin Leroy Date: Mon, 15 Dec 2008 16:46:27 +0000 (+0000) Subject: 2008-12-15 [colin] 3.6.1cvs78 X-Git-Tag: rel_3_7_0~6 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=0c0b1cd6aef8af14fa964a7f00e4ca4dae5d260f 2008-12-15 [colin] 3.6.1cvs78 * src/compose.c * src/privacy.c * src/privacy.h * src/plugins/pgpcore/sgpgme.c * src/plugins/pgpcore/sgpgme.h * src/plugins/pgpinline/pgpinline.c * src/plugins/pgpmime/pgpmime.c * src/plugins/smime/smime.c Fix bug 1796, 'PGP/MIME setting: "select key by your email address" doesn't work'. Use custom from address if set --- diff --git a/ChangeLog b/ChangeLog index dcc48ebdc..c429aae07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2008-12-15 [colin] 3.6.1cvs78 + + * src/compose.c + * src/privacy.c + * src/privacy.h + * src/plugins/pgpcore/sgpgme.c + * src/plugins/pgpcore/sgpgme.h + * src/plugins/pgpinline/pgpinline.c + * src/plugins/pgpmime/pgpmime.c + * src/plugins/smime/smime.c + Fix bug 1796, 'PGP/MIME setting: "select key by your + email address" doesn't work'. Use custom from address + if set + 2008-12-15 [colin] 3.6.1cvs77 * src/common/utils.c diff --git a/PATCHSETS b/PATCHSETS index 6c7270634..c4e043305 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -3659,3 +3659,4 @@ ( cvs diff -u -r 1.24.2.24 -r 1.24.2.25 Makefile.am; cvs diff -u -r 1.155.2.94 -r 1.155.2.95 src/Makefile.am; cvs diff -u -r 1.9.2.38 -r 1.9.2.39 src/common/ssl.c; cvs diff -u -r 1.36.2.156 -r 1.36.2.157 src/common/utils.c; cvs diff -u -r 1.20.2.64 -r 1.20.2.65 src/common/utils.h; cvs diff -u -r 1.25.2.30 -r 1.25.2.31 tools/Makefile.am; ) > 3.6.1cvs75.patchset ( cvs diff -u -r 1.1.4.3 -r 1.1.4.4 m4/spamassassin.m4; ) > 3.6.1cvs76.patchset ( cvs diff -u -r 1.36.2.157 -r 1.36.2.158 src/common/utils.c; ) > 3.6.1cvs77.patchset +( cvs diff -u -r 1.382.2.489 -r 1.382.2.490 src/compose.c; cvs diff -u -r 1.10.2.16 -r 1.10.2.17 src/privacy.c; cvs diff -u -r 1.10.2.17 -r 1.10.2.18 src/privacy.h; cvs diff -u -r 1.1.2.58 -r 1.1.2.59 src/plugins/pgpcore/sgpgme.c; cvs diff -u -r 1.1.2.11 -r 1.1.2.12 src/plugins/pgpcore/sgpgme.h; cvs diff -u -r 1.1.2.40 -r 1.1.2.41 src/plugins/pgpinline/pgpinline.c; cvs diff -u -r 1.1.2.51 -r 1.1.2.52 src/plugins/pgpmime/pgpmime.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/smime/smime.c; ) > 3.6.1cvs78.patchset diff --git a/configure.ac b/configure.ac index 61409da53..8f8085930 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=6 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=77 +EXTRA_VERSION=78 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/compose.c b/src/compose.c index 63d645889..daa43bc7a 100644 --- a/src/compose.c +++ b/src/compose.c @@ -5111,6 +5111,8 @@ static gint compose_write_to_file(Compose *compose, FILE *fp, gint action, gbool MimeInfo *mimemsg, *mimetext; gint line; const gchar *src_codeset = CS_INTERNAL; + gchar *from_addr = NULL; + gchar *from_name = NULL; if (action == COMPOSE_WRITE_FOR_SEND) attach_parts = TRUE; @@ -5294,12 +5296,31 @@ static gint compose_write_to_file(Compose *compose, FILE *fp, gint action, gbool g_free(buf); + if (strlen(gtk_entry_get_text(GTK_ENTRY(compose->from_name))) != 0) { + gchar *spec = gtk_editable_get_chars(GTK_EDITABLE(compose->from_name), 0, -1); + /* extract name and address */ + if (strstr(spec, " <") && strstr(spec, ">")) { + from_addr = g_strdup(strrchr(spec, '<')+1); + *(strrchr(from_addr, '>')) = '\0'; + from_name = g_strdup(spec); + *(strrchr(from_name, '<')) = '\0'; + } else { + from_name = NULL; + from_addr = NULL; + } + g_free(spec); + } /* sign message if sending */ if (action == COMPOSE_WRITE_FOR_SEND && compose->use_signing && privacy_system_can_sign(compose->privacy_system)) - if (!privacy_sign(compose->privacy_system, mimemsg, compose->account)) + if (!privacy_sign(compose->privacy_system, mimemsg, + compose->account, from_addr)) { + g_free(from_name); + g_free(from_addr); return -2; - + } + g_free(from_name); + g_free(from_addr); procmime_write_mimeinfo(mimemsg, fp); procmime_mimeinfo_free_all(mimemsg); diff --git a/src/plugins/pgpcore/sgpgme.c b/src/plugins/pgpcore/sgpgme.c index 2cd3139b3..2ba23ba45 100644 --- a/src/plugins/pgpcore/sgpgme.c +++ b/src/plugins/pgpcore/sgpgme.c @@ -470,12 +470,16 @@ gchar *sgpgme_get_encrypt_data(GSList *recp_names, gpgme_protocol_t proto) return ret; } -gboolean sgpgme_setup_signers(gpgme_ctx_t ctx, PrefsAccount *account) +gboolean sgpgme_setup_signers(gpgme_ctx_t ctx, PrefsAccount *account, + const gchar *from_addr) { GPGAccountConfig *config; + const gchar *signer_addr = account->address; gpgme_signers_clear(ctx); + if (from_addr) + signer_addr = from_addr; config = prefs_gpg_account_get_config(account); switch(config->sign_key) { @@ -483,7 +487,7 @@ gboolean sgpgme_setup_signers(gpgme_ctx_t ctx, PrefsAccount *account) debug_print("using default gnupg key\n"); break; case SIGN_KEY_BY_FROM: - debug_print("using key for %s\n", account->address); + debug_print("using key for %s\n", signer_addr); break; case SIGN_KEY_CUSTOM: debug_print("using key for %s\n", config->sign_key_id); @@ -496,7 +500,7 @@ gboolean sgpgme_setup_signers(gpgme_ctx_t ctx, PrefsAccount *account) gpgme_error_t err; if (config->sign_key == SIGN_KEY_BY_FROM) - keyid = account->address; + keyid = signer_addr; else if (config->sign_key == SIGN_KEY_CUSTOM) keyid = config->sign_key_id; else diff --git a/src/plugins/pgpcore/sgpgme.h b/src/plugins/pgpcore/sgpgme.h index 51a8914e3..33604c521 100644 --- a/src/plugins/pgpcore/sgpgme.h +++ b/src/plugins/pgpcore/sgpgme.h @@ -44,7 +44,8 @@ gpgme_data_t sgpgme_decrypt_verify (gpgme_data_t cipher, gpgme_ctx_t ctx); gchar *sgpgme_get_encrypt_data (GSList *recp_names, gpgme_protocol_t proto); -gboolean sgpgme_setup_signers(gpgme_ctx_t ctx, PrefsAccount *account); +gboolean sgpgme_setup_signers(gpgme_ctx_t ctx, PrefsAccount *account, + const gchar *from_addr); void sgpgme_check_create_key(void); gboolean sgpgme_has_secret_key(void); void sgpgme_create_secret_key(PrefsAccount *account, gboolean ask_create); diff --git a/src/plugins/pgpinline/pgpinline.c b/src/plugins/pgpinline/pgpinline.c index 9ee4ca8dc..fd8d84b22 100644 --- a/src/plugins/pgpinline/pgpinline.c +++ b/src/plugins/pgpinline/pgpinline.c @@ -566,7 +566,7 @@ static MimeInfo *pgpinline_decrypt(MimeInfo *mimeinfo) return decinfo; } -static gboolean pgpinline_sign(MimeInfo *mimeinfo, PrefsAccount *account) +static gboolean pgpinline_sign(MimeInfo *mimeinfo, PrefsAccount *account, const gchar *from_addr) { MimeInfo *msgcontent; gchar *textstr, *tmp; @@ -613,7 +613,7 @@ static gboolean pgpinline_sign(MimeInfo *mimeinfo, PrefsAccount *account) gpgme_set_textmode(ctx, 1); gpgme_set_armor(ctx, 1); - if (!sgpgme_setup_signers(ctx, account)) { + if (!sgpgme_setup_signers(ctx, account, from_addr)) { gpgme_release(ctx); return FALSE; } diff --git a/src/plugins/pgpmime/pgpmime.c b/src/plugins/pgpmime/pgpmime.c index 2b7d10610..be21e5c23 100644 --- a/src/plugins/pgpmime/pgpmime.c +++ b/src/plugins/pgpmime/pgpmime.c @@ -419,7 +419,7 @@ static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo) return decinfo; } -gboolean pgpmime_sign(MimeInfo *mimeinfo, PrefsAccount *account) +gboolean pgpmime_sign(MimeInfo *mimeinfo, PrefsAccount *account, const gchar *from_addr) { MimeInfo *msgcontent, *sigmultipart, *newinfo; gchar *textstr, *micalg; @@ -497,7 +497,7 @@ gboolean pgpmime_sign(MimeInfo *mimeinfo, PrefsAccount *account) gpgme_set_armor(ctx, 1); gpgme_signers_clear (ctx); - if (!sgpgme_setup_signers(ctx, account)) { + if (!sgpgme_setup_signers(ctx, account, from_addr)) { gpgme_release(ctx); return FALSE; } diff --git a/src/plugins/smime/smime.c b/src/plugins/smime/smime.c index 06684aa31..b48faf3c5 100644 --- a/src/plugins/smime/smime.c +++ b/src/plugins/smime/smime.c @@ -516,7 +516,7 @@ static MimeInfo *smime_decrypt(MimeInfo *mimeinfo) return decinfo; } -gboolean smime_sign(MimeInfo *mimeinfo, PrefsAccount *account) +gboolean smime_sign(MimeInfo *mimeinfo, PrefsAccount *account, const gchar *from_addr) { MimeInfo *msgcontent, *sigmultipart, *newinfo; gchar *textstr, *micalg; @@ -602,7 +602,7 @@ gboolean smime_sign(MimeInfo *mimeinfo, PrefsAccount *account) return FALSE; } - if (!sgpgme_setup_signers(ctx, account)) { + if (!sgpgme_setup_signers(ctx, account, from_addr)) { debug_print("setup_signers failed\n"); gpgme_data_release(gpgtext); gpgme_release(ctx); diff --git a/src/privacy.c b/src/privacy.c index 29038a48f..7c2b7973b 100644 --- a/src/privacy.c +++ b/src/privacy.c @@ -382,7 +382,7 @@ gboolean privacy_system_can_encrypt(const gchar *id) return system->can_encrypt; } -gboolean privacy_sign(const gchar *id, MimeInfo *target, PrefsAccount *account) +gboolean privacy_sign(const gchar *id, MimeInfo *target, PrefsAccount *account, const gchar *from_addr) { PrivacySystem *system; @@ -397,7 +397,7 @@ gboolean privacy_sign(const gchar *id, MimeInfo *target, PrefsAccount *account) if (system->sign == NULL) return FALSE; - return system->sign(target, account); + return system->sign(target, account, from_addr); } gchar *privacy_get_encrypt_data(const gchar *id, GSList *recp_names) diff --git a/src/privacy.h b/src/privacy.h index cf9aa9fce..55b008b70 100644 --- a/src/privacy.h +++ b/src/privacy.h @@ -60,7 +60,8 @@ gboolean privacy_system_can_encrypt (const gchar *); gboolean privacy_sign (const gchar *system, MimeInfo *mimeinfo, - PrefsAccount *account); + PrefsAccount *account, + const gchar *from_addr); gchar *privacy_get_encrypt_data (const gchar *system, GSList *recp_names); const gchar *privacy_get_encrypt_warning (const gchar *system); @@ -92,7 +93,8 @@ struct _PrivacySystem { gboolean can_sign; gboolean (*sign) (MimeInfo *mimeinfo, - PrefsAccount *account); + PrefsAccount *account, + const gchar *from_addr); gboolean can_encrypt; gchar *(*get_encrypt_data) (GSList *recp_names);