From d8052db74a0d2e6a55cf104e0ecb1868936bd09c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 15 Oct 2019 14:30:57 +0200 Subject: [PATCH] gpg: Also delete key-binding signature when deleting a subkey. * g10/delkey.c (do_delete_key): Simplify and correct subkey deletion. -- GnuPG-bug-id: 4665, 4457 Fixes-commit: d9b31d3a20b89a5ad7e9a2158b6da63a9a37fa8a Signed-off-by: Werner Koch --- g10/delkey.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/g10/delkey.c b/g10/delkey.c index e91acb0fc..6116d7406 100644 --- a/g10/delkey.c +++ b/g10/delkey.c @@ -281,25 +281,16 @@ do_delete_key (ctrl_t ctrl, const char *username, int secret, int force, } else if (thiskeyonly == 2) { - int selected = 0; - /* Delete the specified public subkey. */ for (kbctx=NULL; (node = walk_kbnode (keyblock, &kbctx, 0)); ) - { - if (thiskeyonly && targetnode != node) - continue; + if (targetnode == node) + break; + log_assert (node); + delete_kbnode (node); + while ((node = walk_kbnode (keyblock, &kbctx, 0)) + && node->pkt->pkttype == PKT_SIGNATURE) + delete_kbnode (node); - if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) - { - selected = targetnode == node; - if (selected) - delete_kbnode (node); - } - else if (selected && node->pkt->pkttype == PKT_SIGNATURE) - delete_kbnode (node); - else - selected = 0; - } commit_kbnode (&keyblock); err = keydb_update_keyblock (ctrl, hd, keyblock); if (err)