summaryrefslogtreecommitdiffstats
path: root/lib/libalpm
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2019-11-11 22:29:52 +0100
committerAndrew Gregory <andrew@archlinux.org>2020-06-18 10:13:09 +0200
commitc2fa9f85cccc4b576816330762fb55167a1ba78c (patch)
tree50bbd418039f87bee3afe36245d8776247a07775 /lib/libalpm
parent6f1a9e6ea85a49b8aeb3b7bd2454215e9c34f565 (diff)
downloadpacman-c2fa9f85cccc4b576816330762fb55167a1ba78c.tar.gz
pacman-c2fa9f85cccc4b576816330762fb55167a1ba78c.tar.xz
libalpm/sync.c: Do not download missing keys multiple times
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> (cherry picked from commit 540b19164b1ab3a4950b4a828fb90d047f4a591d)
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/sync.c12
1 files changed, 10 insertions, 2 deletions
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);