diff options
author | Werner Koch <[email protected]> | 2014-12-01 10:54:51 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2014-12-01 10:54:51 +0000 |
commit | f1c3eb4b16ca43b5d3712a3b54c22d17ce85af47 (patch) | |
tree | 182e124446ae81899880017c1dbeaac5579c114a | |
parent | scd: Implement socket redirection. (diff) | |
download | gnupg-f1c3eb4b16ca43b5d3712a3b54c22d17ce85af47.tar.gz gnupg-f1c3eb4b16ca43b5d3712a3b54c22d17ce85af47.zip |
gpg: Fix export bug using exact search with only one key in the keybox.
* g10/export.c (do_export_stream): Disable caching.
* g10/keyserver.c (keyidlist): Ditto.
--
GnuPG-bug-id: 1774
-rw-r--r-- | g10/export.c | 2 | ||||
-rw-r--r-- | g10/keydb.c | 3 | ||||
-rw-r--r-- | g10/keyserver.c | 3 |
3 files changed, 7 insertions, 1 deletions
diff --git a/g10/export.c b/g10/export.c index a92eace12..b65fb8d06 100644 --- a/g10/export.c +++ b/g10/export.c @@ -804,6 +804,8 @@ do_export_stream (ctrl_t ctrl, iobuf_t out, strlist_t users, int secret, sl->d, gpg_strerror (err)); } + keydb_disable_caching (kdbhd); /* We are looping the search. */ + /* It would be nice to see which of the given users did actually match one in the keyring. To implement this we need to have a found flag for each entry in desc. To set this flag we diff --git a/g10/keydb.c b/g10/keydb.c index bafae18a1..a578c7cb7 100644 --- a/g10/keydb.c +++ b/g10/keydb.c @@ -1424,6 +1424,9 @@ keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, if (DBG_CACHE) dump_search_desc (hd, "keydb_search", desc, ndesc); + /* NB: If one of the exact search modes below is used in a loop to + walk over all keys (with the same fingerprint) the caching must + have been disabled for the handle. */ if (!hd->no_caching && ndesc == 1 && (desc[0].mode == KEYDB_SEARCH_MODE_FPR20 diff --git a/g10/keyserver.c b/g10/keyserver.c index 5bc1eba83..e3ad70743 100644 --- a/g10/keyserver.c +++ b/g10/keyserver.c @@ -1229,7 +1229,8 @@ keyidlist(strlist_t users,KEYDB_SEARCH_DESC **klist,int *count,int fakev3) *klist=xmalloc(sizeof(KEYDB_SEARCH_DESC)*num); - kdbhd=keydb_new (); + kdbhd = keydb_new (); + keydb_disable_caching (kdbhd); /* We are looping the search. */ if(!users) { |