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:30:57 +0000
commitd1bc12d1b66e0657969a8eb846bdcd9bee717a7c (patch)
tree6bda0fcb0156bbd5e18a83862ffac19ac463a71e
parentgpg: Put the first key in candidates correctly. (diff)
downloadgnupg-d1bc12d1b66e0657969a8eb846bdcd9bee717a7c.tar.gz
gnupg-d1bc12d1b66e0657969a8eb846bdcd9bee717a7c.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: cc6069ac6ecd57dcbb808f28d54fd9f89dc55014 Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--g10/delkey.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/g10/delkey.c b/g10/delkey.c
index 8a7144ace..41bd70512 100644
--- a/g10/delkey.c
+++ b/g10/delkey.c
@@ -279,21 +279,14 @@ do_delete_key (ctrl_t ctrl, const char *username, int secret, int force,
/* 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)