aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keyedit.c
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2005-06-09 02:53:18 +0000
committerDavid Shaw <[email protected]>2005-06-09 02:53:18 +0000
commit475107dff365673f9038126f99b20a11760f6192 (patch)
tree890c69b28fe04cf29afa2a96597aa1d9590279f2 /g10/keyedit.c
parent* dotlock.c [HAVE_DOSISH_SYSTEM]: Fix unused function warnings on mingw32. (diff)
downloadgnupg-475107dff365673f9038126f99b20a11760f6192.tar.gz
gnupg-475107dff365673f9038126f99b20a11760f6192.zip
* 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.
Diffstat (limited to 'g10/keyedit.c')
-rw-r--r--g10/keyedit.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/g10/keyedit.c b/g10/keyedit.c
index 70c5c5b57..46603d1bc 100644
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -1435,7 +1435,8 @@ static struct
{ "enable" , cmdENABLEKEY , KEYEDIT_NOT_SK, N_("enable key") },
{ "disable" , cmdDISABLEKEY, KEYEDIT_NOT_SK, N_("disable key") },
{ "showphoto",cmdSHOWPHOTO , 0, N_("show selected photo IDs") },
- { "clean", cmdCLEAN , KEYEDIT_NOT_SK, NULL },
+ { "clean", cmdCLEAN , KEYEDIT_NOT_SK,
+ N_("clean unusable parts from key") },
{ NULL, cmdNONE, 0, NULL }
};
@@ -2150,19 +2151,16 @@ keyedit_menu( const char *username, STRLIST locusr,
redisplay=modified=menu_clean_uids_from_key(keyblock);
else if(ascii_strcasecmp(arg_string,"subkeys")==0)
redisplay=modified=menu_clean_subkeys_from_key(keyblock);
- else if(ascii_strcasecmp(arg_string,"all")==0)
- {
- modified=menu_clean_sigs_from_uids(keyblock);
- modified+=menu_clean_uids_from_key(keyblock);
- modified+=menu_clean_subkeys_from_key(keyblock);
- redisplay=modified;
- }
else
tty_printf("Unable to clean `%s'\n",arg_string);
}
else
- tty_printf("Please specify item to clean: `sigs',"
- " `uids', `subkeys', or `all'\n");
+ {
+ modified=menu_clean_sigs_from_uids(keyblock);
+ modified+=menu_clean_uids_from_key(keyblock);
+ modified+=menu_clean_subkeys_from_key(keyblock);
+ redisplay=modified;
+ }
}
break;
@@ -3187,34 +3185,40 @@ menu_clean_sigs_from_uids(KBNODE keyblock)
static int
menu_clean_uids_from_key(KBNODE keyblock)
{
- KBNODE node;
int modified=clean_uids_from_key(keyblock,0);
if(modified)
{
+ KBNODE node,uidnode=NULL;
+
for(node=keyblock->next;node;node=node->next)
{
- if(node->pkt->pkttype==PKT_USER_ID && is_deleted_kbnode(node))
+ if(node->pkt->pkttype==PKT_USER_ID)
+ uidnode=node;
+ else if(uidnode && node->pkt->pkttype==PKT_SIGNATURE
+ && is_deleted_kbnode(node))
{
const char *reason;
- char *user=utf8_to_native(node->pkt->pkt.user_id->name,
- node->pkt->pkt.user_id->len,0);
+ char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name,
+ uidnode->pkt->pkt.user_id->len,0);
- if(node->pkt->pkt.user_id->is_revoked)
+ if(uidnode->pkt->pkt.user_id->is_revoked)
reason=_("revoked");
- else if(node->pkt->pkt.user_id->is_expired)
+ else if(uidnode->pkt->pkt.user_id->is_expired)
reason=_("expired");
else
reason=_("invalid");
- tty_printf("User ID \"%s\" removed: %s\n",user,reason);
+ tty_printf("User ID \"%s\" compacted: %s\n",user,reason);
+
+ uidnode=NULL;
m_free(user);
}
}
}
else
- tty_printf("No user IDs are removable.\n");
+ tty_printf("No user IDs are compactable.\n");
return modified;
}