1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-05-28 21:50:02 +02:00

Allow uid sand key election using a '*'.

This commit is contained in:
Werner Koch 2009-09-04 11:52:03 +00:00
parent 35ab964c86
commit 999a909708
3 changed files with 113 additions and 78 deletions

View File

@ -592,12 +592,12 @@ line.
@item uid @code{n} @item uid @code{n}
@opindex keyedit:uid @opindex keyedit:uid
Toggle selection of user ID or photographic user ID with index @code{n}. Toggle selection of user ID or photographic user ID with index @code{n}.
Use 0 to deselect all. Use @code{*} to select all and @code{0} to deselect all.
@item key @code{n} @item key @code{n}
@opindex keyedit:key @opindex keyedit:key
Toggle selection of subkey with index @code{n}. Toggle selection of subkey with index @code{n}.
Use 0 to deselect all. Use @code{*} to select all and @code{0} to deselect all.
@item sign @item sign
@opindex keyedit:sign @opindex keyedit:sign

View File

@ -1,3 +1,9 @@
2009-09-04 Werner Koch <wk@g10code.com>
* keyedit.c (menu_select_uid): Use IDX ==-1 t select all.
(menu_select_key): Ditto.
(keyedit_menu) <cmdSELKEY, cmdSELUID>: Allow '*' to select all.
2009-09-03 Werner Koch <wk@g10code.com> 2009-09-03 Werner Koch <wk@g10code.com>
* keyedit.c (menu_adduid): Pass keyblock to generate_user_id. * keyedit.c (menu_adduid): Pass keyblock to generate_user_id.

View File

@ -1,6 +1,6 @@
/* keyedit.c - keyedit stuff /* keyedit.c - keyedit stuff
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
* 2008 Free Software Foundation, Inc. * 2008, 2009 Free Software Foundation, Inc.
* *
* This file is part of GnuPG. * This file is part of GnuPG.
* *
@ -1743,12 +1743,22 @@ keyedit_menu( const char *username, strlist_t locusr,
if(strlen(arg_string)==NAMEHASH_LEN*2) if(strlen(arg_string)==NAMEHASH_LEN*2)
redisplay=menu_select_uid_namehash(cur_keyblock,arg_string); redisplay=menu_select_uid_namehash(cur_keyblock,arg_string);
else else
redisplay=menu_select_uid(cur_keyblock,arg_number); {
if (*arg_string == '*'
&& (!arg_string[1] || spacep (arg_string+1)))
arg_number = -1; /* Select all. */
redisplay = menu_select_uid (cur_keyblock, arg_number);
}
break; break;
case cmdSELKEY: case cmdSELKEY:
if( menu_select_key( cur_keyblock, arg_number ) ) {
if (*arg_string == '*'
&& (!arg_string[1] || spacep (arg_string+1)))
arg_number = -1; /* Select all. */
if (menu_select_key( cur_keyblock, arg_number))
redisplay = 1; redisplay = 1;
}
break; break;
case cmdCHECK: case cmdCHECK:
@ -4437,51 +4447,62 @@ menu_set_notation(const char *string,KBNODE pub_keyblock,KBNODE sec_keyblock)
} }
/**************** /*
* Select one user id or remove all selection if index is 0. * Select one user id or remove all selection if IDX is 0 or select
* Returns: True if the selection changed; * all if IDX is -1. Returns: True if the selection changed.
*/ */
static int static int
menu_select_uid( KBNODE keyblock, int idx ) menu_select_uid (KBNODE keyblock, int idx)
{ {
KBNODE node; KBNODE node;
int i; int i;
if (idx == -1) /* Select all. */
{
for (node = keyblock; node; node = node->next)
if (node->pkt->pkttype == PKT_USER_ID)
node->flag |= NODFLG_SELUID;
return 1;
}
else if (idx) /* Toggle. */
{
for (i=0, node = keyblock; node; node = node->next)
{
if (node->pkt->pkttype == PKT_USER_ID)
if (++i == idx)
break;
}
if (!node)
{
tty_printf (_("No user ID with index %d\n"), idx );
return 0;
}
/* first check that the index is valid */ for (i=0, node = keyblock; node; node = node->next)
if( idx ) { {
for( i=0, node = keyblock; node; node = node->next ) { if (node->pkt->pkttype == PKT_USER_ID)
if( node->pkt->pkttype == PKT_USER_ID ) { {
if( ++i == idx ) if (++i == idx)
break; {
} if ((node->flag & NODFLG_SELUID))
} node->flag &= ~NODFLG_SELUID;
if( !node ) { else
tty_printf(_("No user ID with index %d\n"), idx ); node->flag |= NODFLG_SELUID;
return 0; }
} }
}
} }
else { /* reset all */ else /* Unselect all */
for (node = keyblock; node; node = node->next) { {
if( node->pkt->pkttype == PKT_USER_ID ) for (node = keyblock; node; node = node->next)
node->flag &= ~NODFLG_SELUID; if (node->pkt->pkttype == PKT_USER_ID)
} node->flag &= ~NODFLG_SELUID;
return 1;
} }
/* and toggle the new index */
for( i=0, node = keyblock; node; node = node->next ) { return 1;
if( node->pkt->pkttype == PKT_USER_ID ) {
if( ++i == idx ) {
if( (node->flag & NODFLG_SELUID) )
node->flag &= ~NODFLG_SELUID;
else
node->flag |= NODFLG_SELUID;
}
}
}
return 1;
} }
/* Search in the keyblock for a uid that matches namehash */ /* Search in the keyblock for a uid that matches namehash */
static int static int
menu_select_uid_namehash( KBNODE keyblock, const char *namehash ) menu_select_uid_namehash( KBNODE keyblock, const char *namehash )
@ -4523,50 +4544,58 @@ menu_select_uid_namehash( KBNODE keyblock, const char *namehash )
/**************** /****************
* Select secondary keys * Select secondary keys
* Returns: True if the selection changed; * Returns: True if the selection changed.
*/ */
static int static int
menu_select_key( KBNODE keyblock, int idx ) menu_select_key (KBNODE keyblock, int idx)
{ {
KBNODE node; KBNODE node;
int i; int i;
/* first check that the index is valid */ if (idx == -1) /* Select all. */
if( idx ) { {
for( i=0, node = keyblock; node; node = node->next ) { for (node = keyblock; node; node = node->next)
if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY
|| node->pkt->pkttype == PKT_SECRET_SUBKEY ) { || node->pkt->pkttype == PKT_SECRET_SUBKEY)
if( ++i == idx ) node->flag |= NODFLG_SELKEY;
break;
}
}
if( !node ) {
tty_printf(_("No subkey with index %d\n"), idx );
return 0;
}
} }
else { /* reset all */ else if (idx) /* Toggle selection. */
for ( node = keyblock; node; node = node->next ) { {
if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY for (i=0, node = keyblock; node; node = node->next)
|| node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
node->flag &= ~NODFLG_SELKEY; if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY
} || node->pkt->pkttype == PKT_SECRET_SUBKEY)
return 1; if (++i == idx)
break;
}
if (!node)
{
tty_printf (_("No subkey with index %d\n"), idx );
return 0;
}
for (i=0, node = keyblock; node; node = node->next)
{
if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
|| node->pkt->pkttype == PKT_SECRET_SUBKEY )
if (++i == idx)
{
if ((node->flag & NODFLG_SELKEY))
node->flag &= ~NODFLG_SELKEY;
else
node->flag |= NODFLG_SELKEY;
}
}
} }
/* and set the new index */ else /* Unselect all. */
for( i=0, node = keyblock; node; node = node->next ) { {
if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY for (node = keyblock; node; node = node->next)
|| node->pkt->pkttype == PKT_SECRET_SUBKEY ) { if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY
if( ++i == idx ) { || node->pkt->pkttype == PKT_SECRET_SUBKEY)
if( (node->flag & NODFLG_SELKEY) ) node->flag &= ~NODFLG_SELKEY;
node->flag &= ~NODFLG_SELKEY;
else
node->flag |= NODFLG_SELKEY;
}
}
} }
return 1; return 1;
} }