- for (curkey = *keys; curkey != NULL; curkey = curkey->next) {
- intrans = starttrans();
- logthing(LOGTHING_INFO,
- "Fetching key 0x%llX, result: %d",
- get_keyid(curkey),
- fetch_key(get_keyid(curkey), &oldkey, intrans));
-
- /*
- * If we already have the key stored in the DB then merge it
- * with the new one that's been supplied. Otherwise the key
- * we've just got is the one that goes in the DB and also the
- * one that we send out.
- */
- if (oldkey != NULL) {
- merge_keys(oldkey, curkey);
- if (curkey->revocations == NULL &&
- curkey->uids == NULL &&
- curkey->subkeys == NULL) {
- if (prev == NULL) {
- *keys = curkey->next;
- } else {
- prev->next = curkey->next;
- curkey->next = NULL;
- free_publickey(curkey);
- curkey = prev;
- }
- } else {
- prev = curkey;
- logthing(LOGTHING_INFO,
- "Merged key; storing updated key.");
- store_key(oldkey, intrans, true);
- }
- free_publickey(oldkey);
- oldkey = NULL;
-
- } else {
- logthing(LOGTHING_INFO,
- "Storing completely new key.");
- store_key(curkey, intrans, false);
- newkeys++;
- }
- endtrans();
- intrans = false;
- }