aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)