diff options
author | Werner Koch <[email protected]> | 2019-10-15 12:30:57 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-10-15 12:30:57 +0000 |
commit | d1bc12d1b66e0657969a8eb846bdcd9bee717a7c (patch) | |
tree | 6bda0fcb0156bbd5e18a83862ffac19ac463a71e | |
parent | gpg: Put the first key in candidates correctly. (diff) | |
download | gnupg-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.c | 21 |
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) |