aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2014-12-01 10:54:51 +0000
committerWerner Koch <[email protected]>2014-12-01 10:54:51 +0000
commitf1c3eb4b16ca43b5d3712a3b54c22d17ce85af47 (patch)
tree182e124446ae81899880017c1dbeaac5579c114a
parentscd: Implement socket redirection. (diff)
downloadgnupg-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.c2
-rw-r--r--g10/keydb.c3
-rw-r--r--g10/keyserver.c3
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)
{