aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keydb.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2025-10-22 01:52:52 +0000
committerNIIBE Yutaka <[email protected]>2025-10-22 01:52:52 +0000
commit4a2dda2002c42fa541dacd142093c89476df606d (patch)
tree2d16bc08c7bf4135536e5ae1fb8c33bb5fa66b94 /g10/keydb.c
parentgpg,gpgsm: No more internal-lock when KEEP_LOCK is enabled. (diff)
downloadgnupg-4a2dda2002c42fa541dacd142093c89476df606d.tar.gz
gnupg-4a2dda2002c42fa541dacd142093c89476df606d.zip
kbx,gpg,gpgsm: Add FP-close method for keydb to close before unlock.
* kbx/keybox.h (keybox_fp_close): New. * kbx/keybox-init.c (keybox_fp_close): New. (keybox_release): Don't close FP here. * kbx/keybox-update.c (keybox_compress_when_no_other_users): Use keybox_fp_close. * kbx/backend-kbx.c (be_kbx_release_kbx_hd): Follow the change. * g10/keyring.h (keyring_fp_close): New. * g10/keyring.c (keyring_fp_close): New. (keyring_release): Don't close IOBUF here. (keyring_rebuild_cache): Use keyring_fp_close. * g10/keydb.c (do_fp_close): New. (unlock_all): Close FP before unlocking. * sm/keydb.c (do_fp_close): New. (unlock_all): Close FP before unlocking. -- GnuPG-bug-id: 7855 Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'g10/keydb.c')
-rw-r--r--g10/keydb.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/g10/keydb.c b/g10/keydb.c
index 06c78f048..cdad8a450 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -1059,11 +1059,34 @@ lock_all (KEYDB_HANDLE hd)
static void
+do_fp_close (KEYDB_HANDLE hd)
+{
+ int i;
+
+ for (i=0; i < hd->used; i++)
+ {
+ switch (hd->active[i].type)
+ {
+ case KEYDB_RESOURCE_TYPE_NONE:
+ break;
+ case KEYDB_RESOURCE_TYPE_KEYRING:
+ keyring_fp_close (hd->active[i].u.kr);
+ break;
+ case KEYDB_RESOURCE_TYPE_KEYBOX:
+ keybox_fp_close (hd->active[i].u.kb);
+ break;
+ }
+ }
+}
+
+static void
unlock_all (KEYDB_HANDLE hd)
{
int i;
- if (!hd->locked || hd->keep_lock)
+ do_fp_close (hd);
+
+ if (!hd->locked)
return;
for (i=hd->used-1; i >= 0; i--)