* keylist.c (email_kludge): Reworked.
authorWerner Koch <wk@gnupg.org>
Wed, 20 Jul 2005 15:05:05 +0000 (15:05 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 20 Jul 2005 15:05:05 +0000 (15:05 +0000)
* certdump.c (gpgsm_print_serial, gpgsm_dump_serial): Cast printf
arg to unsigned.
* call-dirmngr.c (gpgsm_dirmngr_run_command): Ditto

THANKS
TODO
scd/ChangeLog
scd/apdu.c
scd/app-openpgp.c
scd/scdaemon.c
sm/ChangeLog
sm/call-dirmngr.c
sm/certdump.c
sm/keylist.c
sm/server.c

diff --git a/THANKS b/THANKS
index 57add95..4084970 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -1,7 +1,8 @@
 
 Alexander Belopolsky      belopolsky at mac.com
 Andrew J. Schorr          aschorr at telemetry-investments.com
-Kazu Yamamoto             kazu@iij.ad.jp
+Charly Avital             shavital at mac.com
+Kazu Yamamoto             kazu at iij.ad.jp
 Michael Nottebrock        michaelnottebrock at gmx.net
 Ray Link                  rlink at pitt.edu
 Richard Lefebvre          rick at cerca.umontreal.ca
diff --git a/TODO b/TODO
index 5f1b57a..478f437 100644 (file)
--- a/TODO
+++ b/TODO
@@ -103,3 +103,5 @@ might want to have an agent context for each service request
 
 
 
+* sm/
+** --include-certs seems to  be a dummy option.
index 0f7e4d2..970335a 100644 (file)
@@ -1,3 +1,16 @@
+2005-07-05  Werner Koch  <wk@g10code.com>
+
+       * app-openpgp.c (do_readkey): Return a mallcoed copy of the key as
+       required by the description.  Thanks to Moritz for tracking this
+       problem down.
+
+2005-06-21  Werner Koch  <wk@g10code.com>
+
+       * scdaemon.c (main): ifdef call to ccid_set_debug_level.
+
+       * apdu.c (reset_pcsc_reader, open_pcsc_reader): Cast size_t to
+       ulong for printf.
+
 2005-06-06  Werner Koch  <wk@g10code.com>
 
        * scdaemon.c (main): New option --debug-allow-core-dump. 
index 975fffa..79022f2 100644 (file)
@@ -809,7 +809,8 @@ reset_pcsc_reader (int slot)
   len -= 4; /* Already read the error code. */
   if (len > DIM (slotp->atr))
     {
-      log_error ("PC/SC returned a too large ATR (len=%x)\n", len);
+      log_error ("PC/SC returned a too large ATR (len=%lx)\n",
+                 (unsigned long)len);
       sw = SW_HOST_GENERAL_ERROR;
       goto command_failed;
     }
@@ -1425,7 +1426,8 @@ open_pcsc_reader (const char *portstr)
   len -= 4; /* Already read the error code. */
   if (len > DIM (slotp->atr))
     {
-      log_error ("PC/SC returned a too large ATR (len=%x)\n", len);
+      log_error ("PC/SC returned a too large ATR (len=%lx)\n",
+                 (unsigned long)len);
       goto command_failed;
     }
   err = (msgbuf[5] << 24) | (msgbuf[6] << 16) | (msgbuf[7] << 8 ) | msgbuf[8];
index 11e6eeb..bd56fb9 100644 (file)
@@ -1230,8 +1230,15 @@ do_readkey (app_t app, const char *keyid, unsigned char **pk, size_t *pklen)
   buf = app->app_local->pk[keyno-1].key;
   if (!buf)
     return gpg_error (GPG_ERR_NO_PUBKEY);
-  *pk = buf;
   *pklen = app->app_local->pk[keyno-1].keylen;;
+  *pk = xtrymalloc (*pklen);
+  if (!*pk)
+    {
+      err = gpg_error_from_errno (errno);
+      *pklen = 0;
+      return err;
+    }
+  memcpy (*pk, buf, *pklen);
   return 0;
 #else
   return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
index c75e87a..c6995ab 100644 (file)
@@ -456,7 +456,9 @@ main (int argc, char **argv )
           allow_coredump = 1;
           break;
         case oDebugCCIDDriver: 
+#ifdef HAVE_LIBUSB
           ccid_set_debug_level (ccid_set_debug_level (-1)+1);
+#endif /*HAVE_LIBUSB*/
           break;
         case oDebugDisableTicker: ticker_disabled = 1; break;
 
index f1eb49c..cefa77e 100644 (file)
@@ -1,3 +1,11 @@
+2005-07-20  Werner Koch  <wk@g10code.com>
+
+       * keylist.c (email_kludge): Reworked.
+
+       * certdump.c (gpgsm_print_serial, gpgsm_dump_serial): Cast printf
+       arg to unsigned.
+       * call-dirmngr.c (gpgsm_dirmngr_run_command): Ditto
+
 2005-07-19  Werner Koch  <wk@g10code.com>
 
        * fingerprint.c (gpgsm_get_certid): Cast printf arg to unsigned.
index 847e784..ead117d 100644 (file)
@@ -827,7 +827,7 @@ gpgsm_dirmngr_run_command (CTRL ctrl, const char *command,
             *p++ = '+';
           else if (!isprint (*s) || *s == '+')
             {
-              sprintf (p, "%%%02X", *s);
+              sprintf (p, "%%%02X", *(const unsigned char *)s);
               p += 3;
             }
           else
index 98f019c..aae60e0 100644 (file)
@@ -70,7 +70,7 @@ gpgsm_print_serial (FILE *fp, ksba_const_sexp_t sn)
       else
         {
           for (p++; n; n--, p++)
-            fprintf (fp, "%02X", *p);
+            fprintf (fp, "%02X", *(const unsigned char*)p);
         }
     }
 }
@@ -98,7 +98,7 @@ gpgsm_dump_serial (ksba_const_sexp_t sn)
       else
         {
           for (p++; n; n--, p++)
-            log_printf ("%02X", *p);
+            log_printf ("%02X", *(const unsigned char *)p);
         }
     }
 }
index a0ac73f..8a4eb3c 100644 (file)
@@ -251,30 +251,42 @@ print_time (gnupg_isotime_t t, FILE *fp)
 }
 
 
-/* return an allocated string with the email address extracted from a
+/* Return an allocated string with the email address extracted from a
    DN */
 static char *
 email_kludge (const char *name)
 {
-  const char *p;
+  const char *p, *string;
   unsigned char *buf;
   int n;
 
-  if (strncmp (name, "1.2.840.113549.1.9.1=#", 22))
-    return NULL;
+  string = name;
+  for (;;)
+    {
+      p = strstr (string, "1.2.840.113549.1.9.1=#");
+      if (!p)
+        return NULL;
+      if (p == name || (p > string+1 && p[-1] == ',' && p[-2] != '\\'))
+        {
+          name = p + 22;
+          break;
+        }
+      string = p + 22;
+    }
+
+
   /* This looks pretty much like an email address in the subject's DN
      we use this to add an additional user ID entry.  This way,
      openSSL generated keys get a nicer and usable listing */
-  name += 22;    
   for (n=0, p=name; hexdigitp (p) && hexdigitp (p+1); p +=2, n++)
     ;
-  if (*p != '#' || !n)
+  if (!n)
     return NULL;
   buf = xtrymalloc (n+3);
   if (!buf)
     return NULL; /* oops, out of core */
   *buf = '<';
-  for (n=1, p=name; *p != '#'; p +=2, n++)
+  for (n=1, p=name; hexdigitp (p); p +=2, n++)
     buf[n] = xtoi_2 (p);
   buf[n++] = '>';
   buf[n] = 0;
index b3816d3..87a06ee 100644 (file)
@@ -1109,7 +1109,7 @@ write_status_text_and_buffer ( int no, const char *string,
         if (s != buffer) 
             fwrite (buffer, s-buffer, 1, statusfp );
         if ( esc ) {
-            fprintf (statusfp, "%%%02X", *(const byte*)s );
+            fprintf (statusfp, "%%%02X", *(const unsigned char*)s );
             s++; n--;
         }
         buffer = s;