* card-util.c (card_edit): Remove PIN verification.

(generate_card_keys): New arg SERIALNO.  Do PIN verification here
after resetting forced_chv1.
This commit is contained in:
Werner Koch 2004-04-29 17:25:38 +00:00
parent 99a4774e34
commit b6018a1b0e
3 changed files with 33 additions and 33 deletions

View File

@ -1,3 +1,9 @@
2004-04-28 Werner Koch <wk@gnupg.org>
* card-util.c (card_edit): Remove PIN verification.
(generate_card_keys): New arg SERIALNO. Do PIN verification here
after resetting forced_chv1.
2004-04-26 Werner Koch <wk@gnupg.org> 2004-04-26 Werner Koch <wk@gnupg.org>
* card-util.c (change_name): Check that the NAME is not too long. * card-util.c (change_name): Check that the NAME is not too long.

View File

@ -870,7 +870,7 @@ agent_scd_change_pin (int chvno)
} }
/* Perform a CHECKPIN operation. SERIALNO should be the seriial /* Perform a CHECKPIN operation. SERIALNO should be the serial
number of the card - optioanlly followed by the fingerprint; number of the card - optioanlly followed by the fingerprint;
however the fingerprint is ignored here. */ however the fingerprint is ignored here. */
int int

View File

@ -614,7 +614,7 @@ toggle_forcesig (void)
static void static void
generate_card_keys (void) generate_card_keys (const char *serialno)
{ {
struct agent_card_info_s info; struct agent_card_info_s info;
int rc; int rc;
@ -670,7 +670,15 @@ generate_card_keys (void)
return; return;
} }
} }
generate_keypair (NULL, info.serialno);
/* Check the PIN now, so that we won't get asked later for each
binding signature. */
rc = agent_scd_checkpin (serialno);
if (rc)
log_error ("error checking the PIN: %s\n", gpg_strerror (rc));
else
generate_keypair (NULL, info.serialno);
agent_release_card_info (&info); agent_release_card_info (&info);
if (forced_chv1) if (forced_chv1)
{ /* Switch back to forced state. */ { /* Switch back to forced state. */
@ -700,26 +708,25 @@ card_edit (STRLIST commands)
static struct { static struct {
const char *name; const char *name;
enum cmdids id; enum cmdids id;
int requires_pin;
const char *desc; const char *desc;
} cmds[] = { } cmds[] = {
{ N_("quit") , cmdQUIT , 0, N_("quit this menu") }, { N_("quit") , cmdQUIT , N_("quit this menu") },
{ N_("q") , cmdQUIT , 0, NULL }, { N_("q") , cmdQUIT , NULL },
{ N_("help") , cmdHELP , 0, N_("show this help") }, { N_("help") , cmdHELP , N_("show this help") },
{ "?" , cmdHELP , 0, NULL }, { "?" , cmdHELP , NULL },
{ N_("list") , cmdLIST , 0, N_("list all available data") }, { N_("list") , cmdLIST , N_("list all available data") },
{ N_("l") , cmdLIST , 0, NULL }, { N_("l") , cmdLIST , NULL },
{ N_("debug") , cmdDEBUG , 0, NULL }, { N_("debug") , cmdDEBUG , NULL },
{ N_("name") , cmdNAME , 1, N_("change card holder's name") }, { N_("name") , cmdNAME , N_("change card holder's name") },
{ N_("url") , cmdURL , 1, N_("change URL to retrieve key") }, { N_("url") , cmdURL , N_("change URL to retrieve key") },
{ N_("login") , cmdLOGIN , 1, N_("change the login name") }, { N_("login") , cmdLOGIN , N_("change the login name") },
{ N_("lang") , cmdLANG , 1, N_("change the language preferences") }, { N_("lang") , cmdLANG , N_("change the language preferences") },
{ N_("sex") , cmdSEX , 1, N_("change card holder's sex") }, { N_("sex") , cmdSEX , N_("change card holder's sex") },
{ N_("forcesig"), { N_("forcesig"),
cmdFORCESIG, 1, N_("toggle the signature force PIN flag") }, cmdFORCESIG, N_("toggle the signature force PIN flag") },
{ N_("generate"), { N_("generate"),
cmdGENERATE, 1, N_("generate new keys") }, cmdGENERATE, N_("generate new keys") },
{ N_("passwd"), cmdPASSWD, 0, N_("menu to change or unblock the PIN") }, { N_("passwd"), cmdPASSWD, N_("menu to change or unblock the PIN") },
{ NULL, cmdINVCMD } { NULL, cmdINVCMD }
}; };
@ -745,7 +752,6 @@ card_edit (STRLIST commands)
const char *arg_string = ""; const char *arg_string = "";
char *p; char *p;
int i; int i;
int requires_pin;
tty_printf("\n"); tty_printf("\n");
if (redisplay ) if (redisplay )
@ -791,7 +797,6 @@ card_edit (STRLIST commands)
while( *answer == '#' ); while( *answer == '#' );
arg_number = 0; /* Yes, here is the init which egcc complains about */ arg_number = 0; /* Yes, here is the init which egcc complains about */
requires_pin = 0;
if (!*answer) if (!*answer)
cmd = cmdLIST; /* Default to the list command */ cmd = cmdLIST; /* Default to the list command */
else if (*answer == CONTROL_D) else if (*answer == CONTROL_D)
@ -811,19 +816,8 @@ card_edit (STRLIST commands)
break; break;
cmd = cmds[i].id; cmd = cmds[i].id;
requires_pin = cmds[i].requires_pin;
} }
if (requires_pin && !did_checkpin)
{
int rc = agent_scd_checkpin (serialnobuf);
if (rc)
{
log_error ("error checking the PIN: %s\n", gpg_strerror (rc));
continue;
}
did_checkpin = 1;
}
switch (cmd) switch (cmd)
{ {
@ -862,7 +856,7 @@ card_edit (STRLIST commands)
break; break;
case cmdGENERATE: case cmdGENERATE:
generate_card_keys (); generate_card_keys (serialnobuf);
break; break;
case cmdPASSWD: case cmdPASSWD: