[balsa/wip/gtk4: 218/351] gmime-gpgme-signature: Declare it final
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 218/351] gmime-gpgme-signature: Declare it final
- Date: Wed, 23 May 2018 21:35:17 +0000 (UTC)
commit 1a61cb5e2d6161720030539ed8823d4d88d3e9e3
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Tue Mar 13 13:47:48 2018 -0400
gmime-gpgme-signature: Declare it final
Use G_DECLARE_FINAL_TYPE for GmimeGpgmeSignature, take all members
private, and provide getters and a setter.
libbalsa/body.c | 39 ++++--
libbalsa/gmime-gpgme-signature.c | 286 ++++++++++++++++++++++++--------------
libbalsa/gmime-gpgme-signature.h | 92 ++++++-------
libbalsa/gmime-multipart-crypt.c | 2 +-
libbalsa/libbalsa-gpgme.c | 2 +-
libbalsa/rfc3156.c | 14 ++-
src/balsa-message.c | 20 ++--
src/balsa-mime-widget-crypto.c | 34 +++--
src/balsa-mime-widget-message.c | 17 ++-
src/balsa-print-object-header.c | 7 +-
src/print-gtk.c | 3 +-
11 files changed, 313 insertions(+), 203 deletions(-)
---
diff --git a/libbalsa/body.c b/libbalsa/body.c
index 83d2f4f..d93e942 100644
--- a/libbalsa/body.c
+++ b/libbalsa/body.c
@@ -874,21 +874,32 @@ libbalsa_message_body_get_by_id(LibBalsaMessageBody * body,
#ifdef HAVE_GPGME
LibBalsaMsgProtectState
-libbalsa_message_body_protect_state(LibBalsaMessageBody *body)
+libbalsa_message_body_protect_state(LibBalsaMessageBody * body)
{
- LibBalsaMsgProtectState state;
-
- if ((body == NULL) || (body->sig_info == NULL) || (body->sig_info->status == GPG_ERR_NOT_SIGNED) ||
- (body->sig_info->status == GPG_ERR_CANCELED)) {
- state = LIBBALSA_MSG_PROTECT_NONE;
- } else if (body->sig_info->status != GPG_ERR_NO_ERROR) {
- state = LIBBALSA_MSG_PROTECT_SIGN_BAD;
- } else if ((body->sig_info->summary & GPGME_SIGSUM_VALID) == GPGME_SIGSUM_VALID) {
- state = LIBBALSA_MSG_PROTECT_SIGN_GOOD;
- } else {
- state = LIBBALSA_MSG_PROTECT_SIGN_NOTRUST;
- }
+ gpgme_error_t status;
+ LibBalsaMsgProtectState state;
+
+ if ((body == NULL) || (body->sig_info == NULL)) {
+ return LIBBALSA_MSG_PROTECT_NONE;
+ }
+
+ status = g_mime_gpgme_sigstat_get_status(body->sig_info);
+
+ if (status == GPG_ERR_NOT_SIGNED || status == GPG_ERR_CANCELED) {
+ state = LIBBALSA_MSG_PROTECT_NONE;
+ } else if (status != GPG_ERR_NO_ERROR) {
+ state = LIBBALSA_MSG_PROTECT_SIGN_BAD;
+ } else {
+ gpgme_sigsum_t summary =
+ g_mime_gpgme_sigstat_get_summary(body->sig_info);
+
+ if ((summary & GPGME_SIGSUM_VALID) == GPGME_SIGSUM_VALID) {
+ state = LIBBALSA_MSG_PROTECT_SIGN_GOOD;
+ } else {
+ state = LIBBALSA_MSG_PROTECT_SIGN_NOTRUST;
+ }
+ }
- return state;
+ return state;
}
#endif
diff --git a/libbalsa/gmime-gpgme-signature.c b/libbalsa/gmime-gpgme-signature.c
index 746a60e..23f5199 100644
--- a/libbalsa/gmime-gpgme-signature.c
+++ b/libbalsa/gmime-gpgme-signature.c
@@ -1,24 +1,24 @@
/* -*-mode:c; c-style:k&r; c-basic-offset:4; -*- */
/*
* gmime/gpgme glue layer library
- * Copyright (C) 2004-2016 Albrecht Dreß <albrecht dress arcor de>
+ * Copyright (C) 2004-2018 Albrecht Dreß <albrecht dress arcor de>
*
* 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, or (at your option)
+ * the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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, see <http://www.gnu.org/licenses/>.
*/
#if defined(HAVE_CONFIG_H) && HAVE_CONFIG_H
-# include "config.h"
+# include "config.h"
#endif /* HAVE_CONFIG_H */
#include <ctype.h>
@@ -34,116 +34,120 @@
#include "gmime-gpgme-signature.h"
#ifdef G_LOG_DOMAIN
-# undef G_LOG_DOMAIN
+# undef G_LOG_DOMAIN
#endif
#define G_LOG_DOMAIN "crypto"
/* stuff for the signature status as returned by gpgme as an GObject */
-static GObjectClass *g_mime_gpgme_sigstat_parent_class = NULL;
-
-static void g_mime_gpgme_sigstat_class_init(GMimeGpgmeSigstatClass *
- klass);
-static void g_mime_gpgme_sigstat_finalize(GMimeGpgmeSigstat * self);
+static void g_mime_gpgme_sigstat_class_init(GMimeGpgmeSigstatClass *klass);
+static void g_mime_gpgme_sigstat_init(GMimeGpgmeSigstat *sigstat);
+static void g_mime_gpgme_sigstat_finalize(GMimeGpgmeSigstat *sigstat);
/* GMimeGpgmeSigstat related stuff */
-GType
-g_mime_gpgme_sigstat_get_type(void)
-{
- static GType g_mime_gpgme_sigstat_type = 0;
-
- if (!g_mime_gpgme_sigstat_type) {
- static const GTypeInfo g_mime_gpgme_sigstat_info = {
- sizeof(GMimeGpgmeSigstatClass), /* class_size */
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) g_mime_gpgme_sigstat_class_init, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(GMimeGpgmeSigstat), /* instance_size */
- 0, /* n_preallocs */
- NULL, /* instance_init */
- /* no value_table */
- };
-
- g_mime_gpgme_sigstat_type =
- g_type_register_static(G_TYPE_OBJECT, "GMimeGpgmeSigstat",
- &g_mime_gpgme_sigstat_info, 0);
- }
- return g_mime_gpgme_sigstat_type;
+struct _GMimeGpgmeSigstat {
+ GObject parent;
+
+ /* results form gpgme's verify operation */
+ gpgme_protocol_t protocol;
+ gpgme_sigsum_t summary;
+ gpgme_error_t status;
+ gpgme_validity_t validity;
+ gchar *fingerprint;
+ time_t sign_time;
+
+ /* information about the key used to create the signature */
+ gpgme_key_t key;
+};
+
+struct _GMimeGpgmeSigstatClass {
+ GObjectClass parent;
+};
+
+G_DEFINE_TYPE(GMimeGpgmeSigstat, g_mime_gpgme_sigstat, G_TYPE_OBJECT)
+
+static void
+g_mime_gpgme_sigstat_init(GMimeGpgmeSigstat *sigstat)
+{
}
GMimeGpgmeSigstat *
g_mime_gpgme_sigstat_new(gpgme_ctx_t ctx)
{
- GMimeGpgmeSigstat *result;
+ GMimeGpgmeSigstat *sigstat;
- result = GMIME_GPGME_SIGSTAT(g_object_new(GMIME_TYPE_GPGME_SIGSTAT, NULL));
- result->protocol = gpgme_get_protocol(ctx);
- result->status = GPG_ERR_NOT_SIGNED;
- return result;
+ sigstat = GMIME_GPGME_SIGSTAT(g_object_new(GMIME_TYPE_GPGME_SIGSTAT, NULL));
+ sigstat->protocol = gpgme_get_protocol(ctx);
+ sigstat->status = GPG_ERR_NOT_SIGNED;
+
+ return sigstat;
}
GMimeGpgmeSigstat *
g_mime_gpgme_sigstat_new_from_gpgme_ctx(gpgme_ctx_t ctx)
{
- GMimeGpgmeSigstat *sig_stat;
+ GMimeGpgmeSigstat *sigstat;
gpgme_verify_result_t result;
g_return_val_if_fail(ctx, NULL);
- sig_stat = g_mime_gpgme_sigstat_new(ctx);
+ sigstat = g_mime_gpgme_sigstat_new(ctx);
/* try to retrieve the result of a verify operation */
result = gpgme_op_verify_result(ctx);
if ((result != NULL) && (result->signatures != NULL)) {
/* there is at least one signature */
- sig_stat->fingerprint = g_strdup(result->signatures->fpr);
- sig_stat->sign_time = result->signatures->timestamp;
- sig_stat->summary = result->signatures->summary;
- sig_stat->status = gpgme_err_code(result->signatures->status);
- sig_stat->validity = result->signatures->validity;
+ sigstat->fingerprint = g_strdup(result->signatures->fpr);
+ sigstat->sign_time = result->signatures->timestamp;
+ sigstat->summary = result->signatures->summary;
+ sigstat->status = gpgme_err_code(result->signatures->status);
+ sigstat->validity = result->signatures->validity;
}
- return sig_stat;
+ return sigstat;
}
+
void
g_mime_gpgme_sigstat_load_key(GMimeGpgmeSigstat *sigstat)
{
- g_return_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat));
+ g_return_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat));
- if ((sigstat->key == NULL) && ((sigstat->summary & GPGME_SIGSUM_KEY_MISSING) == 0)) {
- gpgme_ctx_t ctx;
+ if ((sigstat->key == NULL) && ((sigstat->summary & GPGME_SIGSUM_KEY_MISSING) == 0)) {
+ gpgme_ctx_t ctx;
- ctx = libbalsa_gpgme_new_with_proto(sigstat->protocol, NULL, NULL, NULL);
- sigstat->key = libbalsa_gpgme_load_key(ctx, sigstat->fingerprint, NULL);
- gpgme_release(ctx);
- }
+ ctx = libbalsa_gpgme_new_with_proto(sigstat->protocol, NULL, NULL, NULL);
+ sigstat->key = libbalsa_gpgme_load_key(ctx, sigstat->fingerprint, NULL);
+ gpgme_release(ctx);
+ }
}
+
const gchar *
-g_mime_gpgme_sigstat_protocol_name(const GMimeGpgmeSigstat *sigstat)
+g_mime_gpgme_sigstat_protocol_name(GMimeGpgmeSigstat *sigstat)
{
- g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), NULL);
+ g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), NULL);
switch (sigstat->protocol) {
case GPGME_PROTOCOL_OpenPGP:
- return _("PGP signature: ");
+ return _("PGP signature: ");
+
case GPGME_PROTOCOL_CMS:
- return _("S/MIME signature: ");
+ return _("S/MIME signature: ");
+
default:
- return _("(unknown protocol) ");
+ return _("(unknown protocol) ");
}
}
+
static inline void
append_time_t(GString *str,
- const gchar *format,
- time_t when,
+ const gchar *format,
+ time_t when,
const gchar *date_string)
{
if (when != (time_t) 0) {
@@ -155,30 +159,33 @@ append_time_t(GString *str,
}
}
+
gchar *
-g_mime_gpgme_sigstat_to_gchar(const GMimeGpgmeSigstat *info,
- gboolean full_details,
- const gchar *date_string)
+g_mime_gpgme_sigstat_to_gchar(GMimeGpgmeSigstat *sigstat,
+ gboolean full_details,
+ const gchar *date_string)
{
GString *msg;
- g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(info), NULL);
+ g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), NULL);
g_return_val_if_fail(date_string != NULL, NULL);
- msg = g_string_new(g_mime_gpgme_sigstat_protocol_name(info));
- msg = g_string_append(msg, libbalsa_gpgme_sig_stat_to_gchar(info->status));
- g_string_append_printf(msg, _("\nSignature validity: %s"), libbalsa_gpgme_validity_to_gchar(info->
validity));
- append_time_t(msg, _("\nSigned on: %s"), info->sign_time, date_string);
- if (info->fingerprint) {
- g_string_append_printf(msg, _("\nKey fingerprint: %s"), info->fingerprint);
+
+ msg = g_string_new(g_mime_gpgme_sigstat_protocol_name(sigstat));
+ msg = g_string_append(msg, libbalsa_gpgme_sig_stat_to_gchar(sigstat->status));
+ g_string_append_printf(msg, _("\nSignature validity: %s"),
+ libbalsa_gpgme_validity_to_gchar(sigstat->validity));
+ append_time_t(msg, _("\nSigned on: %s"), sigstat->sign_time, date_string);
+ if (sigstat->fingerprint != NULL) {
+ g_string_append_printf(msg, _("\nKey fingerprint: %s"), sigstat->fingerprint);
}
/* append key data */
- if (full_details && (info->key != NULL)) {
- gchar *key_data;
+ if (full_details && (sigstat->key != NULL)) {
+ gchar *key_data;
- key_data = libbalsa_gpgme_key_to_gchar(info->key, info->fingerprint);
- g_string_append_printf(msg, "\n%s", key_data);
- g_free(key_data);
+ key_data = libbalsa_gpgme_key_to_gchar(sigstat->key, sigstat->fingerprint);
+ g_string_append_printf(msg, "\n%s", key_data);
+ g_free(key_data);
}
return g_string_free(msg, FALSE);
@@ -186,25 +193,27 @@ g_mime_gpgme_sigstat_to_gchar(const GMimeGpgmeSigstat *info,
static void
-g_mime_gpgme_sigstat_class_init(GMimeGpgmeSigstatClass * klass)
+g_mime_gpgme_sigstat_class_init(GMimeGpgmeSigstatClass *klass)
{
GObjectClass *gobject_klass = G_OBJECT_CLASS(klass);
- g_mime_gpgme_sigstat_parent_class = g_type_class_peek(G_TYPE_OBJECT);
gobject_klass->finalize =
- (GObjectFinalizeFunc) g_mime_gpgme_sigstat_finalize;
+ (GObjectFinalizeFunc) g_mime_gpgme_sigstat_finalize;
}
+
static void
-g_mime_gpgme_sigstat_finalize(GMimeGpgmeSigstat * self)
+g_mime_gpgme_sigstat_finalize(GMimeGpgmeSigstat *sigstat)
{
- g_free(self->fingerprint);
- if (self->key)
- gpgme_key_unref(self->key);
+ g_free(sigstat->fingerprint);
+ if (sigstat->key) {
+ gpgme_key_unref(sigstat->key);
+ }
- g_mime_gpgme_sigstat_parent_class->finalize(G_OBJECT(self));
+ G_OBJECT_CLASS(g_mime_gpgme_sigstat_parent_class)->finalize(G_OBJECT(sigstat));
}
+
static gchar *
hex_decode(const gchar *hexstr)
{
@@ -213,25 +222,29 @@ hex_decode(const gchar *hexstr)
int inlen;
inlen = strlen(hexstr);
- if ((inlen & 1) == 1)
+ if ((inlen & 1) == 1) {
return g_strdup(hexstr);
+ }
result = g_new0(gchar, (inlen >> 1) + 1);
for (outp = result; *hexstr; outp++) {
- if (isdigit(*hexstr))
+ if (isdigit(*hexstr)) {
*outp = (*hexstr - '0') << 4;
- else
- *outp = (toupper(*hexstr) -'A' + 10) << 4;
+ } else {
+ *outp = (toupper(*hexstr) - 'A' + 10) << 4;
+ }
hexstr++;
- if (isdigit(*hexstr))
+ if (isdigit(*hexstr)) {
*outp |= *hexstr - '0';
- else
- *outp |= toupper(*hexstr) -'A' + 10;
+ } else {
+ *outp |= toupper(*hexstr) - 'A' + 10;
+ }
hexstr++;
}
return result;
}
+
/*
* Change some fields in a S/MIME certificate to human-readable text.
* Note: doesn't do any sophisticated error-checking...
@@ -254,8 +267,9 @@ libbalsa_cert_subject_readable(const gchar *subject)
GString *result;
gchar *readable_subject;
- if (!subject)
+ if (!subject) {
return NULL;
+ }
result = g_string_new(NULL);
elements = g_strsplit(subject, ",", -1);
@@ -267,28 +281,96 @@ libbalsa_cert_subject_readable(const gchar *subject)
*equals++ = '\0';
for (ldap_elem = ldap_id_list;
ldap_elem->ldap_id && strcmp(ldap_elem->ldap_id, elements[n]);
- ldap_elem++);
- if (ldap_elem->ldap_id)
+ ldap_elem++) {
+ }
+ if (ldap_elem->ldap_id) {
result = g_string_append(result, ldap_elem->readable);
- else
+ } else {
result = g_string_append(result, elements[n]);
+ }
result = g_string_append_c(result, '=');
-
+
if (*equals == '#') {
gchar *decoded;
decoded = hex_decode(equals + 1);
result = g_string_append(result, decoded);
g_free(decoded);
- } else
+ } else {
result = g_string_append(result, equals);
- } else
+ }
+ } else {
result = g_string_append(result, elements[n]);
- if (elements[n + 1])
+ }
+ if (elements[n + 1]) {
result = g_string_append_c(result, ',');
+ }
}
g_strfreev(elements);
readable_subject = g_string_free(result, FALSE);
libbalsa_utf8_sanitize(&readable_subject, TRUE, NULL);
return readable_subject;
}
+
+
+/*
+ * Getters
+ */
+
+gpgme_error_t
+g_mime_gpgme_sigstat_get_status(GMimeGpgmeSigstat *sigstat)
+{
+ g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), (gpgme_error_t) 0);
+
+ return sigstat->status;
+}
+
+
+gpgme_sigsum_t
+g_mime_gpgme_sigstat_get_summary(GMimeGpgmeSigstat *sigstat)
+{
+ g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), (gpgme_sigsum_t) 0);
+
+ return sigstat->summary;
+}
+
+
+gpgme_protocol_t
+g_mime_gpgme_sigstat_get_protocol(GMimeGpgmeSigstat *sigstat)
+{
+ g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), (gpgme_protocol_t) 0);
+
+ return sigstat->protocol;
+}
+
+
+gpgme_key_t
+g_mime_gpgme_sigstat_get_key(GMimeGpgmeSigstat *sigstat)
+{
+ g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), NULL);
+
+ return sigstat->key;
+}
+
+
+const gchar *
+g_mime_gpgme_sigstat_get_fingerprint(GMimeGpgmeSigstat *sigstat)
+{
+ g_return_val_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat), NULL);
+
+ return sigstat->fingerprint;
+}
+
+
+/*
+ * Setter
+ */
+
+void
+g_mime_gpgme_sigstat_set_status(GMimeGpgmeSigstat *sigstat,
+ gpgme_error_t status)
+{
+ g_return_if_fail(GMIME_IS_GPGME_SIGSTAT(sigstat));
+
+ sigstat->status = status;
+}
diff --git a/libbalsa/gmime-gpgme-signature.h b/libbalsa/gmime-gpgme-signature.h
index 7fde9d0..90711b0 100644
--- a/libbalsa/gmime-gpgme-signature.h
+++ b/libbalsa/gmime-gpgme-signature.h
@@ -1,18 +1,18 @@
/* -*-mode:c; c-style:k&r; c-basic-offset:4; -*- */
/*
* gmime/gpgme glue layer library
- * Copyright (C) 2004-2016 Albrecht Dreß <albrecht dress arcor de>
+ * Copyright (C) 2004-2018 Albrecht Dreß <albrecht dress arcor de>
*
* 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, or (at your option)
+ * the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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, see <http://www.gnu.org/licenses/>.
*/
@@ -26,54 +26,48 @@
G_BEGIN_DECLS
/* the signature status as returned by gpgme as a GObject */
-#define GMIME_TYPE_GPGME_SIGSTAT (g_mime_gpgme_sigstat_get_type())
-#define GMIME_GPGME_SIGSTAT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GMIME_TYPE_GPGME_SIGSTAT,
GMimeGpgmeSigstat))
-#define GMIME_GPGME_SIGSTAT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GMIME_TYPE_GPGME_SIGSTAT,
GMimeGpgmeSigstatClass))
-#define GMIME_IS_GPGME_SIGSTAT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GMIME_TYPE_GPGME_SIGSTAT))
-#define GMIME_IS_GPGME_SIGSTAT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GMIME_TYPE_GPGME_SIGSTAT))
-#define GMIME_GPGME_SIGSTAT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GMIME_TYPE_GPGME_SIGSTAT,
GMimeGpgmeSigstatClass))
-
-typedef struct _GMimeGpgmeSigstat GMimeGpgmeSigstat;
-typedef struct _GMimeGpgmeSigstatClass GMimeGpgmeSigstatClass;
-typedef struct _sig_uid_t sig_uid_t;
-
-struct _GMimeGpgmeSigstat {
- GObject parent;
-
- /* results form gpgme's verify operation */
- gpgme_protocol_t protocol;
- gpgme_sigsum_t summary;
- gpgme_error_t status;
- gpgme_validity_t validity;
- gchar *fingerprint;
- time_t sign_time;
-
- /* information about the key used to create the signature */
- gpgme_key_t key;
-};
-
-struct _GMimeGpgmeSigstatClass {
- GObjectClass parent;
-};
-
-
-GType g_mime_gpgme_sigstat_get_type(void);
-GMimeGpgmeSigstat *g_mime_gpgme_sigstat_new(gpgme_ctx_t ctx)
- G_GNUC_WARN_UNUSED_RESULT;
+
+#define GMIME_TYPE_GPGME_SIGSTAT (g_mime_gpgme_sigstat_get_type())
+
+G_DECLARE_FINAL_TYPE(GMimeGpgmeSigstat,
+ g_mime_gpgme_sigstat,
+ GMIME,
+ GPGME_SIGSTAT,
+ GObject)
+
+GMimeGpgmeSigstat * g_mime_gpgme_sigstat_new(gpgme_ctx_t ctx)
+G_GNUC_WARN_UNUSED_RESULT;
GMimeGpgmeSigstat *g_mime_gpgme_sigstat_new_from_gpgme_ctx(gpgme_ctx_t ctx)
- G_GNUC_WARN_UNUSED_RESULT;
-void g_mime_gpgme_sigstat_load_key(GMimeGpgmeSigstat *sigstat);
+G_GNUC_WARN_UNUSED_RESULT;
+void g_mime_gpgme_sigstat_load_key(GMimeGpgmeSigstat *sigstat);
-const gchar *g_mime_gpgme_sigstat_protocol_name(const GMimeGpgmeSigstat *sigstat);
-gchar *g_mime_gpgme_sigstat_to_gchar(const GMimeGpgmeSigstat *info,
- gboolean
full_details,
- const gchar *date_string)
- G_GNUC_WARN_UNUSED_RESULT;
+const gchar *g_mime_gpgme_sigstat_protocol_name(GMimeGpgmeSigstat *sigstat);
+gchar *g_mime_gpgme_sigstat_to_gchar(GMimeGpgmeSigstat *sigstat,
+ gboolean full_details,
+ const gchar *date_string)
+G_GNUC_WARN_UNUSED_RESULT;
gchar *libbalsa_cert_subject_readable(const gchar *subject)
- G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_WARN_UNUSED_RESULT;
+
+/*
+ * Getters
+ */
+
+gpgme_error_t g_mime_gpgme_sigstat_get_status(GMimeGpgmeSigstat *sigstat);
+gpgme_sigsum_t g_mime_gpgme_sigstat_get_summary(GMimeGpgmeSigstat *sigstat);
+gpgme_protocol_t g_mime_gpgme_sigstat_get_protocol(GMimeGpgmeSigstat *sigstat);
+gpgme_key_t g_mime_gpgme_sigstat_get_key(GMimeGpgmeSigstat *sigstat);
+const gchar *g_mime_gpgme_sigstat_get_fingerprint(GMimeGpgmeSigstat *sigstat);
+
+/*
+ * Setter
+ */
+
+void g_mime_gpgme_sigstat_set_status(GMimeGpgmeSigstat *sigstat,
+ gpgme_error_t status);
G_END_DECLS
-#endif /* __GMIME_GPGME_SIGNATURE_H__ */
+#endif /* __GMIME_GPGME_SIGNATURE_H__ */
diff --git a/libbalsa/gmime-multipart-crypt.c b/libbalsa/gmime-multipart-crypt.c
index 9457196..465f561 100644
--- a/libbalsa/gmime-multipart-crypt.c
+++ b/libbalsa/gmime-multipart-crypt.c
@@ -537,7 +537,7 @@ g_mime_gpgme_mpe_decrypt(GMimeMultipartEncrypted * mpe,
/* cache the decrypted part */
if (signature) {
- if (sigstat->status != GPG_ERR_NOT_SIGNED)
+ if (g_mime_gpgme_sigstat_get_status(sigstat) != GPG_ERR_NOT_SIGNED)
*signature = sigstat;
else
g_object_unref(G_OBJECT(sigstat));
diff --git a/libbalsa/libbalsa-gpgme.c b/libbalsa/libbalsa-gpgme.c
index a093e69..a09f807 100644
--- a/libbalsa/libbalsa-gpgme.c
+++ b/libbalsa/libbalsa-gpgme.c
@@ -347,7 +347,7 @@ libbalsa_gpgme_verify(GMimeStream * content, GMimeStream * sig_plain,
libbalsa_gpgme_set_error(error, err,
_("signature verification failed"));
result = g_mime_gpgme_sigstat_new(ctx);
- result->status = err;
+ g_mime_gpgme_sigstat_set_status(result, err);
} else
result = g_mime_gpgme_sigstat_new_from_gpgme_ctx(ctx);
diff --git a/libbalsa/rfc3156.c b/libbalsa/rfc3156.c
index b84cecb..695f421 100644
--- a/libbalsa/rfc3156.c
+++ b/libbalsa/rfc3156.c
@@ -460,7 +460,9 @@ libbalsa_body_decrypt(LibBalsaMessageBody *body, gpgme_protocol_t protocol, GtkW
libbalsa_message_body_set_mime_body(body, mime_obj);
if (sig_state) {
- if (sig_state->status != GPG_ERR_NOT_SIGNED)
+ gpgme_error_t status = g_mime_gpgme_sigstat_get_status(sig_state);
+
+ if (status != GPG_ERR_NOT_SIGNED)
body->sig_info = sig_state;
else
g_object_unref(G_OBJECT(sig_state));
@@ -541,7 +543,7 @@ libbalsa_rfc2440_verify(GMimePart * part, GMimeGpgmeSigstat ** sig_info)
retval = GPG_ERR_GENERAL;
}
} else
- retval = result->status;
+ retval = g_mime_gpgme_sigstat_get_status(result);
/* return the signature info if requested */
if (sig_info != NULL) {
@@ -597,13 +599,15 @@ libbalsa_rfc2440_decrypt(GMimePart * part, GMimeGpgmeSigstat ** sig_info,
retval = GPG_ERR_GENERAL;
}
} else {
- if (result->status == GPG_ERR_NOT_SIGNED)
+ gpgme_error_t status = g_mime_gpgme_sigstat_get_status(result);
+
+ if (status == GPG_ERR_NOT_SIGNED)
retval = GPG_ERR_NO_ERROR;
else
- retval = result->status;
+ retval = status;
/* return the signature info if requested */
- if (sig_info && result->status != GPG_ERR_NOT_SIGNED)
+ if (sig_info && status != GPG_ERR_NOT_SIGNED)
*sig_info = result;
else
g_object_unref(G_OBJECT(result));
diff --git a/src/balsa-message.c b/src/balsa-message.c
index 7c1fdae..aa30b59 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -2669,6 +2669,7 @@ get_crypto_content_icon(LibBalsaMessageBody * body, const gchar * content_type,
GdkPixbuf *icon;
gchar * new_title;
const gchar * icon_name;
+ gpgme_error_t status;
if ((libbalsa_message_body_protection(body) &
(LIBBALSA_PROTECT_ENCRYPT | LIBBALSA_PROTECT_ERROR)) ==
@@ -2683,21 +2684,21 @@ get_crypto_content_icon(LibBalsaMessageBody * body, const gchar * content_type,
if (!icon_title)
return icon;
+ status = g_mime_gpgme_sigstat_get_status(body->sig_info);
if (*icon_title &&
g_ascii_strcasecmp(content_type, "application/pgp-signature") &&
g_ascii_strcasecmp(content_type, "application/pkcs7-signature") &&
- g_ascii_strcasecmp(content_type, "application/x-pkcs7-signature"))
+ g_ascii_strcasecmp(content_type, "application/x-pkcs7-signature")) {
new_title = g_strconcat(*icon_title, "; ",
g_mime_gpgme_sigstat_protocol_name(body->sig_info),
- libbalsa_gpgme_sig_stat_to_gchar(body->sig_info->status),
+ libbalsa_gpgme_sig_stat_to_gchar(status),
NULL);
- else
+ } else
new_title = g_strconcat(g_mime_gpgme_sigstat_protocol_name(body->sig_info),
- libbalsa_gpgme_sig_stat_to_gchar(body->sig_info->status),
+ libbalsa_gpgme_sig_stat_to_gchar(status),
NULL);
- if (*icon_title)
- g_free(*icon_title);
+ g_free(*icon_title);
*icon_title = new_title;
return icon;
@@ -2910,7 +2911,8 @@ libbalsa_msg_try_mp_signed(LibBalsaMessage * message, LibBalsaMessageBody *body,
_("Detected a good signature"));
break;
case LIBBALSA_MSG_PROTECT_SIGN_NOTRUST:
- if (body->parts->next->sig_info->protocol == GPGME_PROTOCOL_CMS)
+ if (g_mime_gpgme_sigstat_get_protocol(body->parts->next->sig_info)
+ == GPGME_PROTOCOL_CMS)
libbalsa_information
(LIBBALSA_INFORMATION_MESSAGE,
_("Detected a good signature with insufficient "
@@ -2928,7 +2930,7 @@ libbalsa_msg_try_mp_signed(LibBalsaMessage * message, LibBalsaMessageBody *body,
_("Checking the signature of the message sent by %s with "
"subject “%s” returned:\n%s"),
chk_crypto->sender, chk_crypto->subject,
- libbalsa_gpgme_sig_stat_to_gchar(body->parts->next->sig_info->status));
+
libbalsa_gpgme_sig_stat_to_gchar(g_mime_gpgme_sigstat_get_status(body->parts->next->sig_info)));
break;
default:
break;
@@ -3031,7 +3033,7 @@ libbalsa_msg_part_2440(LibBalsaMessage * message, LibBalsaMessageBody * body,
libbalsa_mailbox_unlock_store(body->message->mailbox);
if (body->sig_info && sig_res == GPG_ERR_NO_ERROR) {
- if ((body->sig_info->summary & GPGME_SIGSUM_VALID) == GPGME_SIGSUM_VALID) {
+ if ((g_mime_gpgme_sigstat_get_summary(body->sig_info) & GPGME_SIGSUM_VALID) == GPGME_SIGSUM_VALID) {
g_debug("%s: detected a good signature", __func__);
} else {
libbalsa_information
diff --git a/src/balsa-mime-widget-crypto.c b/src/balsa-mime-widget-crypto.c
index 06c8f8e..246088f 100644
--- a/src/balsa-mime-widget-crypto.c
+++ b/src/balsa-mime-widget-crypto.c
@@ -111,9 +111,13 @@ balsa_mime_widget_signature_widget(LibBalsaMessageBody * mime_body,
GtkWidget *vbox, *label;
GtkWidget *signature_widget;
gchar **lines;
+ gpgme_error_t status;
- if (!mime_body->sig_info ||
- mime_body->sig_info->status == GPG_ERR_NOT_SIGNED)
+ if (mime_body->sig_info == NULL)
+ return NULL;
+
+ status = g_mime_gpgme_sigstat_get_status(mime_body->sig_info);
+ if (status == GPG_ERR_NOT_SIGNED)
return NULL;
infostr = g_mime_gpgme_sigstat_to_gchar(mime_body->sig_info, FALSE, balsa_app.date_string);
@@ -128,17 +132,19 @@ balsa_mime_widget_signature_widget(LibBalsaMessageBody * mime_body,
gtk_label_set_selectable(GTK_LABEL(label), TRUE);
gtk_widget_set_halign(label, GTK_ALIGN_START);
gtk_box_pack_start(GTK_BOX(vbox), label);
- if (mime_body->sig_info->protocol == GPGME_PROTOCOL_OpenPGP) {
+ if (g_mime_gpgme_sigstat_get_protocol(mime_body->sig_info)
+ == GPGME_PROTOCOL_OpenPGP) {
GtkWidget *button;
- if (mime_body->sig_info->status == GPG_ERR_NO_PUBKEY) {
+ if (status == GPG_ERR_NO_PUBKEY) {
button = gtk_button_new_with_mnemonic(_("_Search key server for this key"));
} else {
button = gtk_button_new_with_mnemonic(_("_Search key server for updates of this key"));
}
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_gpg_key_button),
- (gpointer)mime_body->sig_info->fingerprint);
+ (gpointer) g_mime_gpgme_sigstat_get_fingerprint
+ (mime_body->sig_info));
gtk_box_pack_start(GTK_BOX(vbox), button);
}
@@ -154,8 +160,9 @@ balsa_mime_widget_signature_widget(LibBalsaMessageBody * mime_body,
/* add a callback to load the key when the user wants to show the details
* Note: do *not* pass mime_body->sig_info to the callback, as it will be replaced when the user
re-checks the signature or
* opens the message again in a separate window */
- if (((mime_body->sig_info->summary & GPGME_SIGSUM_KEY_MISSING) == 0) &&
- (mime_body->sig_info->key == NULL)) {
+ if (((g_mime_gpgme_sigstat_get_summary(mime_body->sig_info)
+ & GPGME_SIGSUM_KEY_MISSING) == 0) &&
+ (g_mime_gpgme_sigstat_get_key(mime_body->sig_info) == NULL)) {
g_signal_connect(expander, "activate", (GCallback) show_public_key_data, mime_body);
g_object_set_data(G_OBJECT(expander), "vbox", vbox);
}
@@ -353,16 +360,23 @@ show_public_key_data(GtkExpander *expander,
g_message("%s: %p %p %p", __func__, expander, body, body->sig_info);
if (body->sig_info != NULL) {
- if (body->sig_info->key == NULL) {
+ gpgme_key_t key;
+
+ key = g_mime_gpgme_sigstat_get_key(body->sig_info);
+ if (key == NULL) {
g_mime_gpgme_sigstat_load_key(body->sig_info);
}
- if ((g_object_get_data(G_OBJECT(expander), "vbox") != NULL) && (body->sig_info->key != NULL))
{
+ if (g_object_get_data(G_OBJECT(expander), "vbox") != NULL &&
+ key != NULL) {
GtkWidget *key_widget;
GtkBox *vbox;
+ const gchar *fingerprint;
vbox = GTK_BOX(g_object_steal_data(G_OBJECT(expander), "vbox"));
- key_widget = libbalsa_gpgme_key(body->sig_info->key, body->sig_info->fingerprint, 0U,
FALSE);
+ fingerprint =
+ g_mime_gpgme_sigstat_get_fingerprint(body->sig_info);
+ key_widget = libbalsa_gpgme_key(key, fingerprint, 0U, FALSE);
gtk_box_pack_start(vbox, key_widget);
gtk_box_reorder_child(vbox, key_widget, 1U);
}
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index 010a1ee..9a282f9 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -785,12 +785,13 @@ bmw_message_set_headers_d(BalsaMessage * bm,
if (part->parts
&& part->parts->next
&& part->parts->next->sig_info
- && part->parts->next->sig_info->status !=
+ && g_mime_gpgme_sigstat_get_status(part->parts->next->sig_info) !=
GPG_ERR_NOT_SIGNED)
/* top-level part is RFC 3156 or RFC 2633 signed */
add_header_sigstate(grid, part->parts->next->sig_info);
else if (part->sig_info
- && part->sig_info->status != GPG_ERR_NOT_SIGNED)
+ && g_mime_gpgme_sigstat_get_status(part->sig_info) !=
+ GPG_ERR_NOT_SIGNED)
/* top-level is OpenPGP (RFC 2440) signed */
add_header_sigstate(grid, part->sig_info);
}
@@ -849,13 +850,13 @@ add_header_sigstate(GtkGrid * grid, GMimeGpgmeSigstat * siginfo)
gchar *format;
gchar *msg;
GtkWidget *label;
+ gpgme_error_t status;
- format = siginfo->status ==
- GPG_ERR_NO_ERROR ? "<i>%s%s</i>" : "<b><i>%s%s</i></b>";
- msg = g_markup_printf_escaped
- (format,
- g_mime_gpgme_sigstat_protocol_name(siginfo),
- libbalsa_gpgme_sig_stat_to_gchar(siginfo->status));
+ status = g_mime_gpgme_sigstat_get_status(siginfo);
+ format = status == GPG_ERR_NO_ERROR ? "<i>%s%s</i>" : "<b><i>%s%s</i></b>";
+ msg = g_markup_printf_escaped(format,
+ g_mime_gpgme_sigstat_protocol_name(siginfo),
+ libbalsa_gpgme_sig_stat_to_gchar(status));
label = gtk_label_new(NULL);
gtk_label_set_markup(GTK_LABEL(label), msg);
diff --git a/src/balsa-print-object-header.c b/src/balsa-print-object-header.c
index 86deb18..7ade7ec 100644
--- a/src/balsa-print-object-header.c
+++ b/src/balsa-print-object-header.c
@@ -234,7 +234,8 @@ balsa_print_object_header_new_real(GList * list,
g_string_append_printf(header_buf, "%s%s\n",
g_mime_gpgme_sigstat_protocol_name(siginfo),
- libbalsa_gpgme_sig_stat_to_gchar(siginfo->status));
+ libbalsa_gpgme_sig_stat_to_gchar
+ (g_mime_gpgme_sigstat_get_status(siginfo)));
}
}
#endif /* HAVE_GPGME */
@@ -389,8 +390,8 @@ balsa_print_object_header_crypto(GList *list, GtkPrintContext * context,
pango_font_description_free(header_font);
/* check if the key needs to be loaded */
- if (((body->sig_info->summary & GPGME_SIGSUM_KEY_MISSING) == 0) &&
- (body->sig_info->key == NULL)) {
+ if (((g_mime_gpgme_sigstat_get_summary(body->sig_info) & GPGME_SIGSUM_KEY_MISSING) == 0) &&
+ (g_mime_gpgme_sigstat_get_key(body->sig_info) == NULL)) {
g_mime_gpgme_sigstat_load_key(body->sig_info);
}
diff --git a/src/print-gtk.c b/src/print-gtk.c
index 441a53f..74f32a6 100644
--- a/src/print-gtk.c
+++ b/src/print-gtk.c
@@ -195,7 +195,8 @@ scan_body(GList *bpo_list, GtkPrintContext * context, BalsaPrintSetup * psetup,
if (add_signature) {
gchar *header =
g_strdup_printf(_("This is an inline %s signed %s message part:"),
- body->sig_info->protocol == GPGME_PROTOCOL_OpenPGP ?
+ g_mime_gpgme_sigstat_get_protocol(body->sig_info)
+ == GPGME_PROTOCOL_OpenPGP ?
_("OpenPGP") : _("S/MIME"), conttype);
bpo_list = balsa_print_object_separator(bpo_list, psetup);
bpo_list = balsa_print_object_header_crypto(bpo_list, context, body, header, psetup);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]