]> the.earth.li Git - onak.git/blobdiff - decodekey.c
Update DB3 backend to use 64bit key ids.
[onak.git] / decodekey.c
index 6a1660467e87ba0ccc7b42566f93c47fd4e902ee..8fca1762464a474bfebc994edafec13bedf2d6ec 100644 (file)
@@ -4,6 +4,8 @@
  * Jonathan McDowell <noodles@earth.li>
  *
  * Copyright 2002 Project Purple
+ *
+ * $Id: decodekey.c,v 1.6 2004/05/27 03:24:01 noodles Exp $
  */
 
 #include <assert.h>
@@ -18,6 +20,7 @@
 #include "keyid.h"
 #include "keystructs.h"
 #include "ll.h"
+#include "log.h"
 
 /*
  *     parse_subpackets - Parse the subpackets of a Type 4 signature.
@@ -53,13 +56,13 @@ int parse_subpackets(unsigned char *data, uint64_t *keyid)
                        packetlen <<= 8;
                        packetlen = data[offset++];
                }
-               switch (data[offset]) {
+               switch (data[offset] & 0x7F) {
                case 2:
                        /*
                         * Signature creation time. Might want to output this?
                         */
                        break;
-               case 0x83:
+               case 3:
                        /*
                         * Signature expiration time. Might want to output this?
                         */
@@ -81,6 +84,12 @@ int parse_subpackets(unsigned char *data, uint64_t *keyid)
                        *keyid <<= 8;
                        *keyid += data[offset+packetlen - 1];
                        break;
+               case 20:
+                       /*
+                        * Annotation data.
+                        */
+                       break;
+
                case 23:
                        /*
                         * Key server preferences. Including no-modify.
@@ -94,10 +103,14 @@ int parse_subpackets(unsigned char *data, uint64_t *keyid)
                default:
                        /*
                         * We don't care about unrecognized packets unless bit
-                        * 7 is set in which case we prefer an error than
-                        * ignoring it.
+                        * 7 is set in which case we log a major error.
                         */
-                       assert(!(data[offset] & 0x80));
+                       if (data[offset] & 0x80) {
+                               logthing(LOGTHING_CRITICAL,
+                               "Critical subpacket type not parsed: 0x%X",
+                                       data[offset]);
+                       }
+                               
                }
                offset += packetlen;
        }
@@ -205,6 +218,10 @@ char **keyuids(struct openpgp_publickey *key, char **primary)
        char buf[1024];
        char **uids = NULL;
        int count = 0;
+        
+        if (primary != NULL) {
+               *primary = NULL;
+       }
 
        if (key != NULL && key->uids != NULL) {
                uids = malloc((spsize(key->uids) + 1) * sizeof (char *));
@@ -221,12 +238,13 @@ char **keyuids(struct openpgp_publickey *key, char **primary)
                        curuid = curuid -> next;
                }
                uids[count] = NULL;
-       }
-       /*
-        * TODO: Parse subpackets for real primary ID (v4 keys)
-        */
-       if (primary != NULL) {
-               *primary = uids[0];
+
+               /*
+                * TODO: Parse subpackets for real primary ID (v4 keys)
+                */
+               if (primary != NULL) {
+                       *primary = uids[0];
+               }
        }
 
        return uids;