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()
#endif
if (!gpgme_get_engine_info(&engineInfo)) {
while (engineInfo) {
- debug_print("GpgME Protocol: %s\n Version: %s\n",
+ debug_print("GpgME Protocol: %s\n"
+ "Version: %s (req %s)\n"
+ "Executable: %s\n",
gpgme_get_protocol_name(engineInfo->protocol),
- engineInfo->version);
+ engineInfo->version ? engineInfo->version:"???",
+ engineInfo->req_version ? engineInfo->req_version:"???",
+ engineInfo->file_name ? engineInfo->file_name:"???");
+ if (engineInfo->protocol == GPGME_PROTOCOL_OpenPGP
+ && gpgme_engine_check_version(engineInfo->protocol) !=
+ GPG_ERR_NO_ERROR) {
+ if (engineInfo->file_name && !engineInfo->version) {
+ alertpanel_error(_("Gpgme protocol '%s' is unusable: "
+ "Engine '%s' isn't installed properly."),
+ gpgme_get_protocol_name(engineInfo->protocol),
+ engineInfo->file_name);
+ } else if (engineInfo->file_name && engineInfo->version
+ && engineInfo->req_version) {
+ alertpanel_error(_("Gpgme protocol '%s' is unusable: "
+ "Engine '%s' version %s is installed, "
+ "but version %s is required.\n"),
+ gpgme_get_protocol_name(engineInfo->protocol),
+ engineInfo->file_name,
+ engineInfo->version,
+ engineInfo->req_version);
+ } else {
+ alertpanel_error(_("Gpgme protocol '%s' is unusable "
+ "(unknown problem)"),
+ gpgme_get_protocol_name(engineInfo->protocol));
+ }
+ }
engineInfo = engineInfo->next;
}
}