* keylist.c (list_cert_colon): Print alternative names of subject
authorWerner Koch <wk@gnupg.org>
Thu, 13 Dec 2001 13:11:40 +0000 (13:11 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 13 Dec 2001 13:11:40 +0000 (13:11 +0000)
and a few other values.

sm/ChangeLog
sm/certchain.c
sm/certdump.c
sm/certlist.c
sm/certpath.c
sm/keylist.c

index 140fc2e..20d8558 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-13  Werner Koch  <wk@gnupg.org>
+
+       * keylist.c (list_cert_colon): Print alternative names of subject
+       and a few other values.
+
 2001-12-12  Werner Koch  <wk@gnupg.org>
 
        * gpgsm.c (main): New options --assume-{armor,base64,binary}. 
@@ -38,5 +43,3 @@
  This file is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-       
-
index 9b98ce8..31ddcd8 100644 (file)
@@ -58,8 +58,8 @@ gpgsm_validate_path (KsbaCert cert)
     {
       xfree (issuer);
       xfree (subject);
-      issuer = ksba_cert_get_issuer (subject_cert);
-      subject = ksba_cert_get_subject (subject_cert);
+      issuer = ksba_cert_get_issuer (subject_cert, 0);
+      subject = ksba_cert_get_subject (subject_cert, 0);
 
       if (!issuer)
         {
index 698937d..10af4be 100644 (file)
@@ -103,13 +103,13 @@ gpgsm_dump_cert (const char *text, KsbaCert cert)
       print_time (t);
       log_printf ("\n");
 
-      dn = ksba_cert_get_issuer (cert);
+      dn = ksba_cert_get_issuer (cert, 0);
       log_debug ("  issuer: ");
       print_dn (dn);
       ksba_free (dn);
       log_printf ("\n");
     
-      dn = ksba_cert_get_subject (cert);
+      dn = ksba_cert_get_subject (cert, 0);
       log_debug ("  subject: ");
       print_dn (dn);
       ksba_free (dn);
index 5c3c2a8..097f42d 100644 (file)
@@ -71,7 +71,7 @@ gpgsm_add_to_certlist (const char *name, CERTLIST *listaddr)
   
   keydb_release (kh);
   ksba_cert_release (cert);
-  return rc;
+  return rc == -1? GNUPG_No_Public_Key: rc;
 }
 
 void
index 9b98ce8..31ddcd8 100644 (file)
@@ -58,8 +58,8 @@ gpgsm_validate_path (KsbaCert cert)
     {
       xfree (issuer);
       xfree (subject);
-      issuer = ksba_cert_get_issuer (subject_cert);
-      subject = ksba_cert_get_subject (subject_cert);
+      issuer = ksba_cert_get_issuer (subject_cert, 0);
+      subject = ksba_cert_get_subject (subject_cert, 0);
 
       if (!issuer)
         {
index 98ae8eb..e200c22 100644 (file)
@@ -66,13 +66,24 @@ print_capabilities (KsbaCert cert, FILE *fp)
 }
 
 
+static void
+print_time (time_t t, FILE *fp)
+{
+  if (!t)
+    ;
+  else if ( t == (time_t)(-1) )
+    putc ('?', fp);
+  else
+    fprintf (fp, "%lu", (unsigned long)t);
+}
+
 
 /* List one certificate in colon mode */
 static void
 list_cert_colon (KsbaCert cert, FILE *fp)
 {
-  int trustletter = 0;
-  char *p;
+  int idx, trustletter = 0;
+  unsigned char *p;
 
   fputs ("crt:", fp);
   trustletter = 0;
@@ -90,34 +101,56 @@ list_cert_colon (KsbaCert cert, FILE *fp)
       putc (trustletter, fp);
     }
 
-  fprintf (fp, ":%u:%d::%s:%s:::",
+  fprintf (fp, ":%u:%d::",
            /*keylen_of_cert (cert)*/1024,
-           /* pubkey_algo_of_cert (cert)*/'R',
-           /*colon_datestr_from_cert (cert)*/ "2001-11-11",
-           /*colon_strtime_expire (cert)*/ "2001-11-12" );
-    
+           /* pubkey_algo_of_cert (cert)*/'R');
+
+  /* we assume --fixed-list-mode for gpgsm */
+  print_time ( ksba_cert_get_validity (cert, 0), fp);
+  putc (':', fp);
+  print_time ( ksba_cert_get_validity (cert, 1), fp);
   putc (':', fp);
-  /* fixme: should we print the issuer name here? */
+  putc (':', fp);
+  if ((p = ksba_cert_get_serial (cert)))
+    {
+      int i, len = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
+      for (i=0; i < len; i++)
+        fprintf (fp,"%02X", p[4+i]);
+      xfree (p);
+    }
+  putc (':', fp);
+  putc (':', fp);
+  if ((p = ksba_cert_get_issuer (cert,0)))
+    {
+      fputs (p, fp);  /* FIXME: Escape colons and linefeeds */
+      xfree (p);
+    }
   putc (':', fp);
   print_capabilities (cert, fp);
   putc ('\n', fp);
+
   p = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
   fprintf (fp, "fpr:::::::::%s:\n", p);
   xfree (p);
-  p = gpgsm_get_keygrip_hexstring (cert);
-  fprintf (fp, "grp:::::::::%s:\n", p?p:"");
-  xfree (p);
   if (opt.with_key_data)
-    print_key_data (cert, fp);
+    {
+      if ( (p = gpgsm_get_keygrip_hexstring (cert)))
+        {
+          fprintf (fp, "grp:::::::::%s:\n", p);
+          xfree (p);
+        }
+      print_key_data (cert, fp);
+    }
 
-  fprintf (fp, "uid:%c::::::::", trustletter);
-  p = ksba_cert_get_subject (cert);
-  if (p)
-    fputs (p, fp);  /* FIXME: Escape colons and linefeeds */
-  xfree (p);
-  putc (':', fp);
-  putc (':', fp);
-  putc ('\n', fp);
+  for (idx=0; (p = ksba_cert_get_subject (cert,idx)); idx++)
+    {
+      fprintf (fp, "uid:%c::::::::", trustletter);
+      fputs (p, fp);  /* FIXME: Escape colons and linefeeds */
+      xfree (p);
+      putc (':', fp);
+      putc (':', fp);
+      putc ('\n', fp);
+    }
 }