diff options
author | Werner Koch <[email protected]> | 2019-10-15 12:30:57 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-10-15 12:37:54 +0000 |
commit | d8052db74a0d2e6a55cf104e0ecb1868936bd09c (patch) | |
tree | 1b73e4feeff0a332fa9e32e88046321f82a772e3 | |
parent | Revert "gpg: The first key should be in candidates." (diff) | |
download | gnupg-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.c | 23 |
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) |