/*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto & the Claws Mail team
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2007 the Claws Mail team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
*/
#ifdef HAVE_CONFIG_H
#include <glib.h>
#include <glib/gi18n.h>
#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
-#include <sys/wait.h>
-#if (defined(__DragonFly__) || defined (__NetBSD__) || defined (__FreeBSD__) || defined (__OpenBSD__))
+#ifndef G_OS_WIN32
+# include <sys/wait.h>
+#endif
+#if (defined(__DragonFly__) || defined(SOLARIS) || defined (__NetBSD__) || defined (__FreeBSD__) || defined (__OpenBSD__))
# include <sys/signal.h>
#endif
#ifndef G_OS_WIN32
if ((err = gpgme_op_verify(ctx, sig, plain, dummy)) != GPG_ERR_NO_ERROR) {
debug_print("op_verify err %s\n", gpgme_strerror(err));
- privacy_set_error(gpgme_strerror(err));
+ privacy_set_error("%s", gpgme_strerror(err));
return GINT_TO_POINTER(-GPG_ERR_SYSTEM_ERROR);
-
}
status = gpgme_op_verify_result(ctx);
if (status && status->signatures == NULL) {
return SIGNATURE_CHECK_FAILED;
}
case GPG_ERR_SIG_EXPIRED:
- case GPG_ERR_KEY_EXPIRED:
+ case GPG_ERR_CERT_REVOKED:
return SIGNATURE_WARN;
+ case GPG_ERR_KEY_EXPIRED:
+ return SIGNATURE_KEY_EXPIRED;
case GPG_ERR_BAD_SIGNATURE:
return SIGNATURE_INVALID;
case GPG_ERR_NO_PUBKEY:
else
g_warning(_("PGP Core: Can't get key - no gpg-agent running."));
warned = TRUE;
+ } else {
+ return g_strdup_printf(_("The signature can't be checked - %s"),
+ gpgme_strerror(err));
}
if (key)
uname = extract_name(key->uids->uid);
while (sig) {
gpgme_user_id_t user = NULL;
gpgme_key_t key;
-
+ gpgme_error_t err;
const gchar *keytype, *keyid, *uid;
- gpgme_get_key(ctx, sig->fpr, &key, 0);
+ err = gpgme_get_key(ctx, sig->fpr, &key, 0);
+ if (err != GPG_ERR_NO_ERROR) {
+ key = NULL;
+ g_string_append_printf(siginfo,
+ _("Error checking signature: %s\n"),
+ gpgme_strerror(err));
+ goto bail;
+ }
if (key) {
user = key->uids;
keytype = gpgme_pubkey_algo_name(
case GPG_ERR_NO_ERROR:
case GPG_ERR_KEY_EXPIRED:
g_string_append_printf(siginfo,
- _("Good signature from \"%s\" (Trust: %s)\n"),
- uid, get_validity_str(sig->validity));
+ _("Good signature from uid \"%s\" (Validity: %s)\n"),
+ uid, get_validity_str(user->validity));
break;
case GPG_ERR_SIG_EXPIRED:
g_string_append_printf(siginfo,
- _("Expired signature from \"%s\"\n"),
- uid);
+ _("Expired signature from uid \"%s\" (Validity: %s)\n"),
+ uid, get_validity_str(user->validity));
break;
case GPG_ERR_BAD_SIGNATURE:
g_string_append_printf(siginfo,
user = user ? user->next : NULL;
while (user != NULL) {
g_string_append_printf(siginfo,
- _(" aka \"%s\"\n"),
- user->uid);
+ _(" uid \"%s\" (Validity: %s)\n"),
+ user->uid,
+ get_validity_str(user->validity));
j++;
user = user->next;
}
i++;
sig = sig->next;
}
-
+bail:
ret = siginfo->str;
g_string_free(siginfo, FALSE);
return ret;
debug_print("tmp file %s\n", tmp_file);
err = gpgme_data_new_from_file(&data, tmp_file, 1);
- g_unlink(tmp_file);
+ claws_unlink(tmp_file);
g_free(tmp_file);
debug_print("data %p (%d %d)\n", (void *)&data, mimeinfo->offset, mimeinfo->length);
}
if (gpgme_get_protocol(ctx) == GPGME_PROTOCOL_OpenPGP) {
- if (!getenv("GPG_AGENT_INFO")) {
+ prefs_gpg_enable_agent(prefs_gpg_get_config()->use_gpg_agent);
+ if (!getenv("GPG_AGENT_INFO") || !prefs_gpg_get_config()->use_gpg_agent) {
info.c = ctx;
gpgme_set_passphrase_cb (ctx, gpgmegtk_passphrase_cb, &info);
}
} else {
+ prefs_gpg_enable_agent(TRUE);
info.c = ctx;
gpgme_set_passphrase_cb (ctx, NULL, &info);
}
#endif
if (!gpgme_get_engine_info(&engineInfo)) {
while (engineInfo) {
+#ifndef G_OS_WIN32
debug_print("GpgME Protocol: %s\n"
"Version: %s (req %s)\n"
"Executable: %s\n",
- gpgme_get_protocol_name(engineInfo->protocol),
+ gpgme_get_protocol_name(engineInfo->protocol) ? gpgme_get_protocol_name(engineInfo->protocol):"???",
engineInfo->version ? engineInfo->version:"???",
engineInfo->req_version ? engineInfo->req_version:"???",
engineInfo->file_name ? engineInfo->file_name:"???");
+#endif
if (engineInfo->protocol == GPGME_PROTOCOL_OpenPGP
&& gpgme_engine_check_version(engineInfo->protocol) !=
GPG_ERR_NO_ERROR) {
err = gpgme_op_genkey(ctx, key_parms, NULL, NULL);
g_free(key_parms);
- gtk_widget_destroy(window);
+ label_window_destroy(window);
if (err) {
alertpanel_error(_("Couldn't generate a new key pair: %s"), gpgme_strerror(err));
prefs_gpg_save_config();
}
}
+
+void *sgpgme_data_release_and_get_mem(gpgme_data_t data, size_t *len)
+{
+ char buf[BUFSIZ];
+ void *result = NULL;
+ ssize_t r = 0;
+ size_t w = 0;
+
+ if (data == NULL)
+ return NULL;
+ if (len == NULL)
+ return NULL;
+
+ /* I know it's deprecated, but we don't compile with _LARGEFILE */
+ gpgme_data_rewind(data);
+ while ((r = gpgme_data_read(data, buf, BUFSIZ)) > 0) {
+ result = realloc(result, r + w);
+ memcpy(result+w, buf, r);
+ w += r;
+ }
+
+ *len = w;
+
+ gpgme_data_release(data);
+ if (r < 0) {
+ free(result);
+ *len = 0;
+ return NULL;
+ }
+ return result;
+}
#endif /* USE_GPGME */