aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keydb.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/keydb.c')
-rw-r--r--g10/keydb.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/g10/keydb.c b/g10/keydb.c
index b30819963..fb4966c27 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -1386,6 +1386,12 @@ gpg_error_t
keydb_update_keyblock (KEYDB_HANDLE hd, kbnode_t kb)
{
gpg_error_t err;
+ PKT_public_key *pk = kb->pkt->pkt.public_key;
+ KEYDB_SEARCH_DESC desc;
+ size_t len;
+
+ assert (kb);
+ assert (kb->pkt->pkttype == PKT_PUBLIC_KEY);
if (!hd)
return gpg_error (GPG_ERR_INV_ARG);
@@ -1393,9 +1399,6 @@ keydb_update_keyblock (KEYDB_HANDLE hd, kbnode_t kb)
kid_not_found_flush ();
keyblock_cache_clear (hd);
- if (hd->found < 0 || hd->found >= hd->used)
- return gpg_error (GPG_ERR_VALUE_NOT_FOUND);
-
if (opt.dry_run)
return 0;
@@ -1403,6 +1406,19 @@ keydb_update_keyblock (KEYDB_HANDLE hd, kbnode_t kb)
if (err)
return err;
+ memset (&desc, 0, sizeof (desc));
+ fingerprint_from_pk (pk, desc.u.fpr, &len);
+ if (len == 20)
+ desc.mode = KEYDB_SEARCH_MODE_FPR20;
+ else
+ log_bug ("%s: Unsupported key length: %zd\n", __func__, len);
+
+ keydb_search_reset (hd);
+ err = keydb_search (hd, &desc, 1, NULL);
+ if (err)
+ return gpg_error (GPG_ERR_VALUE_NOT_FOUND);
+ assert (hd->found >= 0 && hd->found < hd->used);
+
switch (hd->active[hd->found].type)
{
case KEYDB_RESOURCE_TYPE_NONE: