summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2022-12-16 15:24:33 +0100
committerWerner Koch <wk@gnupg.org>2022-12-16 15:34:41 +0100
commit49d16f4f6edf872babf04ae383974d891871a33b (patch)
tree1a9307db818ded272ae26d2cf091e6a42f32b2e9
parentgpg: Replace use of PRIu64 in log_debug (diff)
downloadgnupg2-49d16f4f6edf872babf04ae383974d891871a33b.tar.xz
gnupg2-49d16f4f6edf872babf04ae383974d891871a33b.zip
gpg: Do not continue the export after a cancel for the primary key.
* g10/export.c (do_export_one_keyblock): Handle a cancel for the primary key special. -- GnuPG-bug-id: 6093
-rw-r--r--g10/export.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/g10/export.c b/g10/export.c
index 61b5e9a13..b3ad69718 100644
--- a/g10/export.c
+++ b/g10/export.c
@@ -2026,7 +2026,16 @@ do_export_one_keyblock (ctrl_t ctrl, kbnode_t keyblock, u32 *keyid,
hexgrip, pk, NULL);
if (err)
{
- if (gpg_err_code (err) == GPG_ERR_FULLY_CANCELED)
+ /* If we receive a fully canceled error we stop
+ * immediately. If we receive a cancel for a public
+ * key we also stop immediately because a
+ * public/secret key is always required first
+ * (right, we could instead write a stub key but
+ * that is also kind of surprising). If we receive
+ * a subkey we skip to the next subkey. */
+ if (gpg_err_code (err) == GPG_ERR_FULLY_CANCELED
+ || (node->pkt->pkttype == PKT_PUBLIC_KEY
+ && gpg_err_code (err) == GPG_ERR_CANCELED))
goto leave;
write_status_error ("export_keys.secret", err);
skip_until_subkey = 1;