1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

* trustdb.c (clean_uids_from_key), keyedit.c

(menu_clean_uids_from_key): Tweak algorithm to preserve the last
selfsig which helps prevent uid resurrections.
This commit is contained in:
David Shaw 2005-06-09 02:53:18 +00:00
parent dddcb6d90c
commit 475107dff3
3 changed files with 35 additions and 33 deletions

View file

@ -1641,30 +1641,23 @@ clean_sigs_from_uid(KBNODE keyblock,KBNODE uidnode,int noisy)
and is not expired. Note that this does not take into account
whether the uid has a trust path to it - just whether the keyholder
themselves has certified the uid. Returns how many user IDs were
removed. */
removed. To "remove" a user ID, we simply remove ALL signatures
except the self-sig that caused the user ID to be remove-worthy.
We don't actually remove the user ID packet itself since it might
be ressurected in a later merge. */
int
clean_uids_from_key(KBNODE keyblock,int noisy)
{
int uidcount=0,delete_until_next=0,deleted=0;
int delete_until_next=0,deleted=0;
KBNODE node;
assert(keyblock->pkt->pkttype==PKT_PUBLIC_KEY);
merge_keys_and_selfsig(keyblock);
/* First count how many user IDs we have. We need to be careful
that we don't delete them all as some keys could actually have NO
valid user IDs. 2440 requires at least 1 user ID packet, valid
or not. */
for(node=keyblock->next;
node && node->pkt->pkttype!=PKT_PUBLIC_SUBKEY;
node=node->next)
if(node->pkt->pkttype==PKT_USER_ID)
uidcount++;
for(node=keyblock->next;
node && node->pkt->pkttype!=PKT_PUBLIC_SUBKEY && uidcount>deleted+1;
node=node->next)
{
if(node->pkt->pkttype==PKT_USER_ID)
{
@ -1693,7 +1686,7 @@ clean_uids_from_key(KBNODE keyblock,int noisy)
else
reason=_("invalid");
log_info("removing user ID \"%s\" from key %s: %s\n",
log_info("compacting user ID \"%s\" on key %s: %s\n",
user,keystr(keyblock->pkt->pkt.public_key->keyid),
reason);
@ -1701,8 +1694,9 @@ clean_uids_from_key(KBNODE keyblock,int noisy)
}
}
}
if(delete_until_next)
else if(node->pkt->pkttype==PKT_SIGNATURE
&& delete_until_next
&& !node->pkt->pkt.signature->flags.chosen_selfsig)
delete_kbnode(node);
}