aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-10-15 12:30:57 +0000
committerWerner Koch <[email protected]>2019-10-15 12:37:54 +0000
commitd8052db74a0d2e6a55cf104e0ecb1868936bd09c (patch)
tree1b73e4feeff0a332fa9e32e88046321f82a772e3
parentRevert "gpg: The first key should be in candidates." (diff)
downloadgnupg-d8052db74a0d2e6a55cf104e0ecb1868936bd09c.tar.gz
gnupg-d8052db74a0d2e6a55cf104e0ecb1868936bd09c.zip
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 <[email protected]>
-rw-r--r--g10/delkey.c23
1 files 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)