|
|
@ -1,57 +0,0 @@ |
|
|
|
From 108d9d26cd41e63d38557bbe440f9a369c71e9a1 Mon Sep 17 00:00:00 2001 |
|
|
|
From: Damien Goutte-Gattat <dgouttegattat@incenp.org> |
|
|
|
Date: Sun, 18 Feb 2018 23:10:52 +0000 |
|
|
|
Subject: [PATCH gpa] Load the secret keyring before the public one. |
|
|
|
To: gnupg-devel@gnupg.org |
|
|
|
|
|
|
|
* src/keylist.c (gpa_keylist_init): Forcefully load the secret |
|
|
|
keyring before attempting to load the public keys. |
|
|
|
--
|
|
|
|
|
|
|
|
Gpa loads the private keyring in a kind of "lazy mode", in that |
|
|
|
the private keyring is only loaded the first time Gpa needs to |
|
|
|
lookup a private key. This normally happens during the loading |
|
|
|
of the public keyring, since for each public key Gpa must lookup |
|
|
|
in the private keyring to check whether a private counterpart is |
|
|
|
available. |
|
|
|
|
|
|
|
The result is that a Gpg process is spawn to list the secret keys |
|
|
|
while another Gpg process is still listing the public keys. If |
|
|
|
the trust model happens to be TOFU or TOFU+PGP, this can cause |
|
|
|
some problems with regard to the locking of the TOFU database. |
|
|
|
|
|
|
|
To avoid that, this patch makes sure the private keyring is |
|
|
|
actively and synchronously loaded before we fetch the public keys |
|
|
|
(no more lazy loading). |
|
|
|
|
|
|
|
GnuPG-bug-id: 3748 |
|
|
|
Signed-off-by: Damien Goutte-Gattat <dgouttegattat@incenp.org> |
|
|
|
---
|
|
|
|
src/keylist.c | 11 ++++++++++- |
|
|
|
1 file changed, 10 insertions(+), 1 deletion(-) |
|
|
|
|
|
|
|
diff --git a/src/keylist.c b/src/keylist.c
|
|
|
|
index 442da08..2c8e7e8 100644
|
|
|
|
--- a/src/keylist.c
|
|
|
|
+++ b/src/keylist.c
|
|
|
|
@@ -231,7 +231,16 @@ gpa_keylist_init (GTypeInstance *instance, void *class_ptr)
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
- /* Initialize from the global keytable. */
|
|
|
|
+ /* Initialize from the global keytable.
|
|
|
|
+ *
|
|
|
|
+ * We must forcefully load the secret keytable first to
|
|
|
|
+ * prevent concurrent access to the TOFU database. */
|
|
|
|
+ gpa_keytable_force_reload (gpa_keytable_get_secret_instance (),
|
|
|
|
+ NULL, (GpaKeyTableEndFunc) gtk_main_quit,
|
|
|
|
+ NULL);
|
|
|
|
+ gtk_main ();
|
|
|
|
+
|
|
|
|
+ /* Now we can load the public keyring. */
|
|
|
|
gpa_keytable_list_keys (gpa_keytable_get_public_instance(), |
|
|
|
gpa_keylist_next, gpa_keylist_end, list); |
|
|
|
} |
|
|
|
--
|
|
|
|
2.14.1 |
|
|
|
|