No more warnings for AMD64 (at least when cross-compiling). Thus tehre is a
[gnupg.git] / sm / certdump.c
index 0d5146a..9f398d5 100644 (file)
 #include "keydb.h"
 #include "i18n.h"
 
+#ifdef HAVE_FOPENCOOKIE
+typedef ssize_t my_funopen_hook_ret_t;
+#else
+typedef int     my_funopen_hook_ret_t;
+#endif
+
+
 struct dn_array_s {
   char *key;
   char *value;
@@ -238,6 +245,36 @@ gpgsm_dump_cert (const char *text, ksba_cert_t cert)
 }
 
 
+/* Log the certificate's name in "#SN/ISSUERDN" format along with
+   TEXT. */
+void 
+gpgsm_cert_log_name (const char *text, ksba_cert_t cert)
+{
+  log_info ("%s", text? text:"certificate" );
+  if (cert)
+    {
+      ksba_sexp_t sn;
+      char *p;
+
+      p = ksba_cert_get_issuer (cert, 0);
+      sn = ksba_cert_get_serial (cert);
+      if (p && sn)
+        {
+          log_printf (" #");
+          gpgsm_dump_serial (sn);
+          log_printf ("/");
+          gpgsm_dump_string (p);
+        }
+      else
+        log_printf (" [invalid]");
+      ksba_free (sn);
+      xfree (p);
+    }
+  log_printf ("\n");
+}
+
+
+
 \f
 /* helper for the rfc2253 string parser */
 static const unsigned char *
@@ -596,7 +633,7 @@ struct format_name_cookie
 };
 
 /* The writer function for the memory stream. */
-static int 
+static my_funopen_hook_ret_t
 format_name_writer (void *cookie, const char *buffer, size_t size)
 {
   struct format_name_cookie *c = cookie;
@@ -675,6 +712,59 @@ gpgsm_format_name (const char *name)
 }
 
 
+/* Return fingerprint and a percent escaped name in a human readable
+   format suitable for status messages like GOODSIG.  May return NULL
+   on error (out of core). */
+char *
+gpgsm_fpr_and_name_for_status (ksba_cert_t cert)
+{
+  char *fpr, *name, *p;
+  char *buffer;
+
+  fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
+  if (!fpr)
+    return NULL;
+  
+  name = ksba_cert_get_subject (cert, 0);
+  if (!name)
+    {
+      xfree (fpr);
+      return NULL;
+    }
+
+  p = gpgsm_format_name2 (name, 0);
+  ksba_free (name);
+  name = p;
+  if (!name)
+    {
+      xfree (fpr);
+      return NULL;
+    }
+
+  buffer = xtrymalloc (strlen (fpr) + 1 + 3*strlen (name) + 1);
+  if (buffer)
+    {
+      const unsigned char *s;
+
+      p = stpcpy (stpcpy (buffer, fpr), " ");
+      for (s = name; *s; s++)
+        {
+          if (*s < ' ')
+            {
+              sprintf (p, "%%%02X", *s);
+              p += 3;
+            }
+          else
+            *p++ = *s;
+        }
+      *p = 0;
+    }
+  xfree (fpr);
+  xfree (name);
+  return buffer;
+}
+
+
 /* Create a key description for the CERT, this may be passed to the
    pinentry.  The caller must free the returned string. NULL may be
    returned on error. */
@@ -770,3 +860,4 @@ gpgsm_format_keydesc (ksba_cert_t cert)
 
   return buffer;
 }
+