+2006-06-16 [colin] 2.3.0cvs17
+
+ * src/plugins/pgpcore/sgpgme.c
+ * src/plugins/pgpmime/pgpmime.c
+ * src/plugins/pgpinline/pgpinline.c
+ Better error reporting in setup_signers.
+ Don't fallback to default key if specified
+ key isn't found.
+ Don't allow signing if more than one secret
+ key matches the one specified in prefs.
+
2006-06-15 [colin] 2.3.0cvs16
* src/folderview.c
( cvs diff -u -r 1.213.2.100 -r 1.213.2.101 src/folder.c; ) > 2.3.0cvs14.patchset
( diff -u /dev/null tools/make.themes.project; ) > 2.3.0cvs15.patchset
( cvs diff -u -r 1.382.2.277 -r 1.382.2.278 src/compose.c; cvs diff -u -r 1.207.2.103 -r 1.207.2.104 src/folderview.c; cvs diff -u -r 1.28.2.17 -r 1.28.2.18 src/mbox.c; cvs diff -u -r 1.94.2.87 -r 1.94.2.88 src/messageview.c; cvs diff -u -r 1.10.2.8 -r 1.10.2.9 src/privacy.c; cvs diff -u -r 1.10.2.7 -r 1.10.2.8 src/privacy.h; cvs diff -u -r 1.49.2.77 -r 1.49.2.78 src/procmime.c; cvs diff -u -r 1.150.2.68 -r 1.150.2.69 src/procmsg.c; cvs diff -u -r 1.1.2.13 -r 1.1.2.14 src/plugins/pgpcore/passphrase.c; cvs diff -u -r 1.1.2.18 -r 1.1.2.19 src/plugins/pgpcore/sgpgme.c; cvs diff -u -r 1.1.2.12 -r 1.1.2.13 src/plugins/pgpinline/pgpinline.c; cvs diff -u -r 1.1.2.34 -r 1.1.2.35 src/plugins/pgpmime/pgpmime.c; ) > 2.3.0cvs16.patchset
+( cvs diff -u -r 1.1.2.19 -r 1.1.2.20 src/plugins/pgpcore/sgpgme.c; cvs diff -u -r 1.1.2.35 -r 1.1.2.36 src/plugins/pgpmime/pgpmime.c; cvs diff -u -r 1.1.2.13 -r 1.1.2.14 src/plugins/pgpinline/pgpinline.c; ) > 2.3.0cvs17.patchset
if (config->sign_key != SIGN_KEY_DEFAULT) {
gchar *keyid;
- gpgme_key_t key;
+ gpgme_key_t key, key2;
gpgme_error_t err;
if (config->sign_key == SIGN_KEY_BY_FROM)
else if (config->sign_key == SIGN_KEY_CUSTOM)
keyid = config->sign_key_id;
else
- return FALSE;
+ goto bail;
err = gpgme_op_keylist_start(ctx, keyid, 1);
+ if (!err)
+ err = gpgme_op_keylist_next(ctx, &key);
if (err) {
- g_warning("setup_signers start: %s",
- gpg_strerror(err));
- return FALSE;
- }
- while (!(err = gpgme_op_keylist_next(ctx, &key))) {
- gpgme_signers_add(ctx, key);
- gpgme_key_release(key);
+ g_warning("setup_signers start: %s", gpgme_strerror(err));
+ privacy_set_error(_("Private key not found (%s)"), gpgme_strerror(err));
+ goto bail;
}
- if (err && gpg_err_code(err) != GPG_ERR_EOF) {
- g_warning("setup_signers next: %s",
- gpg_strerror(err));
- return FALSE;
+
+ err = gpgme_op_keylist_next(ctx, &key2);
+ if (!err) {
+ g_warning("ambiguous specification of private key '%s'\n",
+ keyid);
+ privacy_set_error(_("Private key specification is ambiguous"));
+ goto bail;
}
- err = gpgme_op_keylist_end(ctx);
+
+ gpgme_op_keylist_end(ctx);
+ err = gpgme_signers_add(ctx, key);
+ gpgme_key_release(key);
+
if (err) {
- g_warning("setup_signers end: %s",
- gpg_strerror(err));
- return FALSE;
+ g_warning("error adding secret key: %s\n", gpgme_strerror(err));
+ privacy_set_error(_("Error setting private key: %s"), gpgme_strerror(err));
+ goto bail;
}
}
prefs_gpg_account_free_config(config);
return TRUE;
+bail:
+ prefs_gpg_account_free_config(config);
+ return FALSE;
}
void sgpgme_init()