cli: make keyid from fingerprint in gmime 3.0
authorDavid Bremner <david@tethera.net>
Fri, 2 Jun 2017 23:57:01 +0000 (20:57 -0300)
committerDavid Bremner <david@tethera.net>
Sat, 15 Jul 2017 00:23:52 +0000 (21:23 -0300)
The "key_id" field seems to used for userid in gmime-3.0, while the
keyid is dropped in the fingerprint field if the full fingerprint is
not available.

notmuch-show.c
util/gmime-extra.c
util/gmime-extra.h

index 311ac6ac43cb71f442a8f9927bca4ff206ae24c5..99475069ba19ba9ad8825c0e84ea932d2ca2a9f7 100644 (file)
@@ -458,7 +458,7 @@ format_part_sigstatus_sprinter (sprinter_t *sp, mime_node_t *node)
                }
            }
        } else if (certificate) {
-           const char *key_id = g_mime_certificate_get_key_id (certificate);
+           const char *key_id = g_mime_certificate_get_fpr16 (certificate);
            if (key_id) {
                sp->map_key (sp, "keyid");
                sp->string (sp, key_id);
index 3c50a293257e0ddd3fc4aed1749e6a77a1c08d91..ed53e0ab2a1efbede90b83d46f72932e62cb8884 100644 (file)
@@ -1,4 +1,5 @@
 #include "gmime-extra.h"
+#include <string.h>
 
 GMimeStream *
 g_mime_stream_stdout_new()
@@ -106,6 +107,15 @@ g_mime_utils_header_decode_date_unix (const char *date) {
 
 #else /* GMime >= 3.0 */
 
+const char*
+g_mime_certificate_get_fpr16 (GMimeCertificate *cert) {
+    const char *fpr = g_mime_certificate_get_fingerprint (cert);
+    if (!fpr || strlen (fpr) < 16)
+       return fpr;
+
+    return fpr + (strlen (fpr) - 16);
+}
+
 char *
 g_mime_message_get_address_string (GMimeMessage *message, GMimeAddressType type)
 {
index 7688129a8cf9d52f5c58120d9b33b803c218ecd6..4407be3358a3576e49316386c5d5ebdc72cff99d 100644 (file)
@@ -14,6 +14,7 @@ GMimeStream *g_mime_stream_stdout_new(void);
 #define GMIME_ADDRESS_TYPE_BCC GMIME_RECIPIENT_TYPE_BCC
 
 #define g_mime_2_6_unref(obj) g_object_unref (obj)
+#define g_mime_certificate_get_fpr16(cert) g_mime_certificate_get_key_id (cert)
 
 #else /* GMime >= 3.0 */
 typedef GMimeAddressType GMimeRecipientType;
@@ -56,6 +57,10 @@ typedef GMimeTrust GMimeCertificateTrust;
 #define g_mime_2_6_unref(obj) /*ignore*/
 #endif
 
+/**
+ * Get last 16 hex digits of fingerprint ("keyid")
+ */
+const char *g_mime_certificate_get_fpr16 (GMimeCertificate *cert);
 /**
  * Return the contents of the appropriate address header as a string
  * Should be freed using g_free