* util.h (digitp, hexdigitp): New ctype like macros.
authorWerner Koch <wk@gnupg.org>
Fri, 14 Dec 2001 13:43:42 +0000 (13:43 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 14 Dec 2001 13:43:42 +0000 (13:43 +0000)
(atoi_1,atoi_2,atoi_4,xtoi_1,xtoi_2): New.

* command.c: Removed the conversion macros as they are now in
../common/util.h.

agent/ChangeLog
agent/command.c
assuan/assuan-handler.c
common/util.h
kbx/keybox-blob.c
sm/server.c

index 0d59e84..6971b20 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-14  Werner Koch  <wk@gnupg.org>
+
+       * command.c: Removed the conversion macros as they are now in
+       ../common/util.h.
+
 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
 
        * query.c (LINELENGTH): Removed.
index 33e61f6..bbee7b4 100644 (file)
 
 
 #define set_error(e,t) assuan_set_error (ctx, ASSUAN_ ## e, (t))
-#define digitp(a) ((a) >= '0' && (a) <= '9')
-#define hexdigitp(a) (digitp (a)                     \
-                      || ((a) >= 'A' && (a) <= 'F')  \
-                      || ((a) >= 'a' && (a) <= 'f'))
-#define atoi_1(p)   (*(p) - '0' )
-#define atoi_2(p)   ((atoi_1(p) * 10) + atoi_1((p)+1))
-/* assumes ASCII and pre-checked values */
-#define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
-                     *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
+
 
 #if MAX_DIGEST_LEN < 20
 #error MAX_DIGEST_LEN shorter than keygrip
@@ -129,7 +120,7 @@ cmd_sigkey (ASSUAN_CONTEXT ctx, char *line)
   unsigned char *buf;
 
   /* parse the hash value */
-  for (p=line,n=0; hexdigitp (*p); p++, n++)
+  for (p=line,n=0; hexdigitp (p); p++, n++)
     ;
   if (*p)
     return set_error (Parameter_Error, "invalid hexstring");
@@ -169,7 +160,7 @@ cmd_sethash (ASSUAN_CONTEXT ctx, char *line)
   ctrl->digest.algo = algo;
 
   /* parse the hash value */
-  for (p=line,n=0; hexdigitp (*p); p++, n++)
+  for (p=line,n=0; hexdigitp (p); p++, n++)
     ;
   if (*p)
     return set_error (Parameter_Error, "invalid hexstring");
index 614f83d..8ec8b23 100644 (file)
@@ -458,7 +458,8 @@ assuan_process_next (ASSUAN_CONTEXT ctx)
  * 
  * Return all active filedescriptors for the given context.  This
  * function can be used to select on the fds and call
- * assuan_process_next() if there is an active one.
+ * assuan_process_next() if there is an active one.  The first fd in
+ * the array is the one used for the command connection.
  *
  * Note, that write FDs are not yet supported.
  * 
index e309233..3552925 100644 (file)
@@ -58,8 +58,8 @@ int map_assuan_err (int err);
 /* some macros to replace ctype ones and avoid locale problems */
 #define digitp(p)   (*(p) >= '0' && *(p) <= '9')
 #define hexdigitp(a) (digitp (a)                     \
-                      || ((a) >= 'A' && (a) <= 'F')  \
-                      || ((a) >= 'a' && (a) <= 'f'))
+                      || (*(a) >= 'A' && *(a) <= 'F')  \
+                      || (*(a) >= 'a' && *(a) <= 'f'))
 /* the atoi macros assume that the buffer has only valid digits */
 #define atoi_1(p)   (*(p) - '0' )
 #define atoi_2(p)   ((atoi_1(p) * 10) + atoi_1((p)+1))
index 18503a5..1f5fe2b 100644 (file)
@@ -121,7 +121,6 @@ X.509 specific are noted like [X.509: xxx]
 #include "keybox-defs.h"
 
 
-
 /* special values of the signature status */
 #define SF_NONE(a)  ( !(a) )
 #define SF_NOKEY(a) ((a) & (1<<0))
@@ -768,6 +767,31 @@ _keybox_create_pgp_blob (KEYBOXBLOB *r_blob, KBNODE keyblock)
 #endif /*KEYBOX_WITH_OPENPGP*/
 
 #ifdef KEYBOX_WITH_X509
+
+/* return an allocated string with the email address extracted from a
+   DN */
+static char *
+x509_email_kludge (const char *name)
+{
+#if 0
+  if (!strncmp (name, "1.2.840.113549.1.9.1=#", 22) 
+      && hexdigitp (name+22) && hexdigitp (name+23))
+    { /* this looks pretty much like an email address in the
+         subjects DN we use this to add an additional user ID
+         entry.  This way, openSSL generated keys get a nicer and
+         usable listing */
+      char *buf = NULL;
+      
+      /* FIXME */
+
+      return buf;
+    }
+#endif
+  return NULL;
+}
+
+
+
 /* Note: We should move calculation of the digest into libksba and
    remove that parameter */
 int
@@ -813,6 +837,7 @@ _keybox_create_x509_blob (KEYBOXBLOB *r_blob, KsbaCert cert,
   names[blob->nuids++] = p;
   for (i=0; (p = ksba_cert_get_subject (cert, i)); i++)
     {
+
       if (blob->nuids >= max_names)
         {
           unsigned char **tmp;
@@ -826,6 +851,8 @@ _keybox_create_x509_blob (KEYBOXBLOB *r_blob, KsbaCert cert,
             }
         }
       names[blob->nuids++] = p;
+      if (!i && (p=x509_email_kludge (p)))
+        names[blob->nuids++] = p; /* due to !i we don't need to check bounds*/
     }
   
   /* space for signature information */
index 59a40ea..a4c0631 100644 (file)
@@ -316,7 +316,7 @@ cmd_message (ASSUAN_CONTEXT ctx, char *line)
   if (strncmp (line, "FD=", 3))
     return set_error (Syntax_Error, "FD=<n> expected");
   line += 3;
-  if (!digitp (*line))
+  if (!digitp (line))
     return set_error (Syntax_Error, "number required");
   fd = strtoul (line, &endp, 10);
   if (*endp)