cscvs to tla changeset 114
[onak.git] / keyid.c
diff --git a/keyid.c b/keyid.c
index ced0c458997a79818518133067b645b8c851faec..95b5dd4452ce7c400557dee75e9e321629b50b7c 100644 (file)
--- a/keyid.c
+++ b/keyid.c
@@ -4,12 +4,15 @@
  * Jonathan McDowell <noodles@earth.li>
  *
  * Copyright 2002 Project Purple
+ *
+ * $Id: keyid.c,v 1.8 2003/11/01 19:25:15 noodles Exp $
  */
 
 #include <sys/types.h>
 
 #include "keyid.h"
 #include "keystructs.h"
+#include "log.h"
 #include "md5.h"
 #include "sha.h"
 
@@ -93,7 +96,7 @@ unsigned char *get_fingerprint(struct openpgp_packet *packet,
                memcpy(fingerprint, buff, *len);
                break;
        default:
-               fprintf(stderr, "Unknown key type: %d\n",
+               logthing(LOGTHING_ERROR, "Unknown key type: %d",
                                packet->data[0]);
        }
 
@@ -122,20 +125,25 @@ uint64_t get_packetid(struct openpgp_packet *packet)
                 * For a type 2 or 3 key the keyid is the last 64 bits of the
                 * public modulus n, which is stored as an MPI from offset 8
                 * onwards.
-                *
-                * We need to ensure it's an RSA key.
                 */
-               if (packet->data[7] == 1) {
-                       offset = (packet->data[8] << 8) +
-                               packet->data[9];
-                       offset = ((offset + 7) / 8) + 2;
-
-                       for (keyid = 0, i = 0; i < 8; i++) {
-                               keyid <<= 8;
-                               keyid += packet->data[offset++];
-                       }
-               } else {
-                       fputs("Type 2 or 3 key, but not RSA.\n", stderr);
+               offset = (packet->data[8] << 8) +
+                       packet->data[9];
+               offset = ((offset + 7) / 8) + 2;
+
+               for (keyid = 0, i = 0; i < 8; i++) {
+                       keyid <<= 8;
+                       keyid += packet->data[offset++];
+               }
+               /*
+                * I thought we needed to ensure it's an RSA key, but pks
+                * doesn't seem to care and I've seen some type 3 keys.
+                * So just log a warning.
+                */
+               if (packet->data[7] != 1) {
+                       logthing(LOGTHING_NOTICE,
+                               "Type 2 or 3 key, but not RSA: %llx (type %d)",
+                               keyid,
+                               packet->data[7]);
                }
                break;
        case 4:
@@ -148,7 +156,7 @@ uint64_t get_packetid(struct openpgp_packet *packet)
 
                break;
        default:
-               fprintf(stderr, "Unknown key type: %d\n",
+               logthing(LOGTHING_ERROR, "Unknown key type: %d",
                                packet->data[0]);
        }