gpg: Disable keydb handle caching
authorAndre Heinecke <aheinecke@intevation.de>
Tue, 30 May 2017 08:22:35 +0000 (10:22 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Tue, 30 May 2017 08:22:35 +0000 (10:22 +0200)
* g10/getkey.c (getkey_end): Disable caching of the open keydb
handle.

--
This created a big regression for Windows because the keyring
is only released after the global ctrl is released. So if an operation
does a getkey and then tries to modify the keyring it will fail on
Windows with a sharing violation. We need to modify all
keyring write operations to also take the ctrl and close the
cached_getkey_kdb handle to make writing work. See:
https://dev.gnupg.org/T3097

GnuPG-Bug-Id: T3097

Signed-off-by: Andre Heinecke <aheinecke@intevation.de>
g10/getkey.c

index 04ecf4f..ac6b9a3 100644 (file)
@@ -2219,10 +2219,20 @@ getkey_end (ctrl_t ctrl, getkey_ctx_t ctx)
 {
   if (ctx)
     {
+/*
+XXX: This creates a big regression for Windows because the keyring
+* is only released after the global ctrl is released. So if an operation
+* does a getkey and then tries to modify the keyring it will fail on
+* Windows with a sharing violation. We need to modify all
+* keyring write operations to also take the ctrl and close the
+* cached_getkey_kdb handle to make writing work. See:
+* https://dev.gnupg.org/T3097
+
       if (ctrl && !ctrl->cached_getkey_kdb)
         ctrl->cached_getkey_kdb = ctx->kr_handle;
       else
-        keydb_release (ctx->kr_handle);
+*/
+      keydb_release (ctx->kr_handle);
       free_strlist (ctx->extra_list);
       if (!ctx->not_allocated)
        xfree (ctx);