[pacman-dev] libalpm/sync.c: Do not download missing keys multiple times

Message ID 20191111213304.47553-1-allan@archlinux.org
State Accepted, archived
Headers show
Series [pacman-dev] libalpm/sync.c: Do not download missing keys multiple times | expand

Commit Message

Allan McRae Nov. 11, 2019, 9:33 p.m. UTC
We now store key structs of our missing key info, so can not search the list
for string matches. This caused missing keys to be downloaded once for every
package they signed.

Signed-off-by: Allan McRae <allan@archlinux.org>
---
 lib/libalpm/sync.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Patch

diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 59108eb9..70c37890 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -873,6 +873,14 @@  finish:
 }
 
 #ifdef HAVE_LIBGPGME
+
+static int key_cmp(const void *k1, const void *k2) {
+	const struct keyinfo_t *key1 = k1;
+	const char *key2 = k2;
+
+	return strcmp(key1->keyid, key2);
+}
+
 static int check_keyring(alpm_handle_t *handle)
 {
 	size_t current = 0, numtargs;
@@ -910,7 +918,7 @@  static int check_keyring(alpm_handle_t *handle)
 					alpm_list_t *k;
 					for(k = keys; k; k = k->next) {
 						char *key = k->data;
-						if(!alpm_list_find_str(errors, key) &&
+						if(!alpm_list_find(errors, key, key_cmp) &&
 								_alpm_key_in_keychain(handle, key) == 0) {
 							keyinfo = malloc(sizeof(struct keyinfo_t));
 							if(!keyinfo) {
@@ -940,7 +948,7 @@  static int check_keyring(alpm_handle_t *handle)
 		alpm_list_t *k;
 		for(k = errors; k; k = k->next) {
 			keyinfo = k->data;
-				if(_alpm_key_import(handle, keyinfo->uid, keyinfo->keyid) == -1) {
+			if(_alpm_key_import(handle, keyinfo->uid, keyinfo->keyid) == -1) {
 				fail = 1;
 			}
 			free(keyinfo->uid);