Index: b/g10/gpg.c =================================================================== --- b/g10/gpg.c +++ b/g10/gpg.c @@ -2075,6 +2075,71 @@ opt.lock_once = 1; #endif /* __riscos__ */ +#if 1 + { + KEYDB_HANDLE hd1, hd2; + KEYDB_SEARCH_DESC desc1, desc2; + KBNODE kb1, kb2; + + keydb_add_resource ("~/neal/work/gpg/gnupg/g10/t-keydb-keyring.kbx", 0); + + hd1 = keydb_new (); + hd2 = keydb_new (); + + rc = classify_user_id ("2689 5E25 E844 6D44 A26D 8FAF 2F79 98F3 DBFC 6AD9", &desc1, 0); + if (rc) + { + log_error ("Failed to convert DBFC6AD9\n"); + return 1; + } + classify_user_id ("8061 5870 F5BA D690 3336 86D0 F2AD 85AC 1E42 B367", &desc2, 0); + if (rc) + { + log_error ("Failed to convert 1E42B367\n"); + return 1; + } + + rc = keydb_search (hd1, &desc1, 1, NULL); + if (rc) + { + log_error ("Failed to find for desc1\n"); + return 1; + } + rc = keydb_search (hd2, &desc2, 1, NULL); + if (rc) + { + log_error ("Failed to find for desc2\n"); + return 1; + } + + rc = keydb_get_keyblock (hd2, &kb2); + if (rc) + { + log_error ("Failed to get keyblock for desc2 (%d)\n", rc); + return 1; + } + rc = keydb_get_keyblock (hd1, &kb1); + if (rc) + { + log_error ("Failed to get keyblock for desc1 (%d)\n", rc); + return 1; + } + + log_info ("desc1: %s\n", kb1->next->pkt->pkt.user_id->name); + log_info ("desc2: %s\n", kb2->next->pkt->pkt.user_id->name); + if (strcmp (kb1->next->pkt->pkt.user_id->name, + kb2->next->pkt->pkt.user_id->name) != 0) + { + log_info("Looks good.\n"); + return 0; + } + else + { + log_info("Same name (fail)!\n"); + return 1; + } + } +#endif /* Please note that we may running SUID(ROOT), so be very CAREFUL when adding any stuff between here and the call to Index: b/g10/keydb.c =================================================================== --- b/g10/keydb.c +++ b/g10/keydb.c @@ -1121,6 +1121,9 @@ { gpg_error_t err = 0; + log_info ("%s: enter (cache state: %d).\n", + __func__, hd->keyblock_cache.state); + *ret_kb = NULL; if (!hd) @@ -1131,6 +1134,7 @@ if (hd->keyblock_cache.state == KEYBLOCK_CACHE_FILLED) { + log_info ("%s: returning data from cache.\n", __func__); err = iobuf_seek (hd->keyblock_cache.iobuf, 0); if (err) { @@ -1178,6 +1182,7 @@ ret_kb); if (!err && hd->keyblock_cache.state == KEYBLOCK_CACHE_PREPARED) { + log_info ("%s: filling cache.\n", __func__); hd->keyblock_cache.state = KEYBLOCK_CACHE_FILLED; hd->keyblock_cache.sigstatus = sigstatus; hd->keyblock_cache.iobuf = iobuf; @@ -1195,7 +1200,10 @@ } if (hd->keyblock_cache.state != KEYBLOCK_CACHE_FILLED) - keyblock_cache_clear (hd); + { + log_info ("%s: cache not filled, clearing.\n", __func__); + keyblock_cache_clear (hd); + } if (DBG_CLOCK) log_clock (err? "keydb_get_keyblock leave (failed)" @@ -1703,9 +1711,12 @@ && ndesc == 1 && (desc[0].mode == KEYDB_SEARCH_MODE_FPR20 || desc[0].mode == KEYDB_SEARCH_MODE_FPR)) { + log_info("%s: preparing cache\n", __func__); hd->keyblock_cache.state = KEYBLOCK_CACHE_PREPARED; memcpy (hd->keyblock_cache.fpr, desc[0].u.fpr, 20); } + else + log_info("%s: NOT preparing cache\n", __func__); if (gpg_err_code (rc) == GPG_ERR_NOT_FOUND && ndesc == 1 && desc[0].mode == KEYDB_SEARCH_MODE_LONG_KID && was_reset