From: Jonathan McDowell <noodles@earth.li>
Date: Mon, 31 May 2004 23:47:01 +0000 (+0000)
Subject: cscvs to tla changeset 17
X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/commitdiff_plain/dc8fa90e2c4e610b879b3c3d7464ab3ee5864a77

cscvs to tla changeset 17
Author: noodles
Date: 2002/09/08 20:16:17
Change to check the signature keyid when merging signatures on a packet.
---

diff --git a/merge.c b/merge.c
index 8bfbd09..6954337 100644
--- a/merge.c
+++ b/merge.c
@@ -12,6 +12,7 @@
 
 #include "keydb.h"
 #include "keyid.h"
+#include "keyindex.h"
 #include "keystructs.h"
 #include "ll.h"
 #include "mem.h"
@@ -19,10 +20,11 @@
 
 /**
  *	compare_packets - Check to see if 2 OpenPGP packets are the same.
- *	@a: The first key to compare.
- *	@b: The second key to compare.
+ *	@a: The first packet to compare.
+ *	@b: The second packet to compare.
  *
- *	Takes 2 keys and returns true if they are the same and false otherwise.
+ *	Takes 2 packets and returns true if they are the same and false
+ *	otherwise.
  */
 bool compare_packets(struct openpgp_packet *a, struct openpgp_packet *b)
 {
@@ -30,6 +32,19 @@ bool compare_packets(struct openpgp_packet *a, struct openpgp_packet *b)
 		!memcmp(a->data, b->data, b->length));
 }
 
+/**
+ *	compare_signatures - Check to see if 2 OpenPGP signatures are the same.
+ *	@a: The first signature to compare.
+ *	@b: The second signature to compare.
+ *
+ *	Takes 2 signature packets and returns true if they are the same and
+ *	false otherwise.
+ */
+bool compare_signatures(struct openpgp_packet *a, struct openpgp_packet *b)
+{
+	return (sig_keyid(a) == sig_keyid(b));
+}
+
 /**
  *	find_packet - Checks to see if an OpenPGP packet exists in a list.
  *	@packet_list: The list of packets to look in.
@@ -53,6 +68,31 @@ bool find_packet(struct openpgp_packet_list *packet_list,
 	return found;
 }
 
+/**
+ *	find_signature - Checks to see if an OpenPGP signature exists in a list.
+ *	@packet_list: The list of packets to look in.
+ *	@packet: The signature to look for.
+ *
+ *	Walks through the packet_list checking to see if the signature given is
+ *	present in it. Returns a pointer to it if it is, NULL otherwise.
+ *
+ */
+struct openpgp_packet_list *find_signature(
+			struct openpgp_packet_list *packet_list,
+			struct openpgp_packet *packet)
+{
+	struct openpgp_packet_list *found = NULL;
+
+	while (!found && packet_list != NULL) {
+		if (compare_signatures(packet_list->packet, packet)) {
+			found = packet_list;
+		}
+		packet_list = packet_list -> next;
+	}
+
+	return found;
+}
+
 /**
  *	get_signed_packet - Gets a signed packet from a list.
  *	@packet_list: The list of packets to look in.
@@ -135,7 +175,13 @@ int merge_packet_sigs(struct openpgp_signedpacket_list *old,
 	curpacket = new->sigs;
 	while (curpacket != NULL) {
 		nextpacket = curpacket->next;
-		if (find_packet(old->sigs, curpacket->packet)) {
+		/*
+		 * TODO: We should be checking the signature and then
+		 * potentially merging/replacing it depending on the subpackets
+		 * really. For now this stops us adding the same one twice
+		 * however.
+		 */ 
+		if (find_signature(old->sigs, curpacket->packet)) {
 			/*
 			 * We already have this sig, remove it from the
 			 * difference list and free the memory allocated for