mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
* passphrase.c (agent_get_passphrase): New args CUSTOM_PROMPT and
CUSTOM_DESCRIPTION. Changed all callers. * app-openpgp.c (do_getattr, do_learn_status, do_setattr): Support the new private DOs. (do_change_pin): Add a "N" prefix to the strings so that the callback can act accordingly for a new PIN. Unfortunately this breaks existing translations but I see no wother way to overvome this. * cardglue.c (learn_status_cb): Ditto. (agent_release_card_info): Ditto. (struct pin_cb_info_s): Removed and changed all users. (pin_cb): Reworked. * card-util.c (card_status): Print them (card_edit): New command PRIVATEDO. (change_private_do): New.
This commit is contained in:
parent
53ae360457
commit
9e52cf2758
6 changed files with 235 additions and 66 deletions
|
@ -377,6 +377,14 @@ card_status (FILE *fp, char *serialno, size_t serialnobuflen)
|
|||
info.disp_sex == 2? _("female") : _("unspecified"));
|
||||
print_name (fp, "URL of public key : ", info.pubkey_url);
|
||||
print_name (fp, "Login data .......: ", info.login_data);
|
||||
if (info.private_do[0])
|
||||
print_name (fp, "Private DO 1 .....: ", info.private_do[0]);
|
||||
if (info.private_do[1])
|
||||
print_name (fp, "Private DO 2 .....: ", info.private_do[1]);
|
||||
if (info.private_do[2])
|
||||
print_name (fp, "Private DO 3 .....: ", info.private_do[2]);
|
||||
if (info.private_do[3])
|
||||
print_name (fp, "Private DO 4 .....: ", info.private_do[3]);
|
||||
if (info.cafpr1valid)
|
||||
{
|
||||
tty_fprintf (fp, "CA fingerprint %d .:", 1);
|
||||
|
@ -631,6 +639,75 @@ change_login (const char *args)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
change_private_do (const char *args, int nr)
|
||||
{
|
||||
char do_name[] = "PRIVATE-DO-X";
|
||||
char *data;
|
||||
int n;
|
||||
int rc;
|
||||
|
||||
assert (nr >= 1 && nr <= 4);
|
||||
do_name[11] = '0' + nr;
|
||||
|
||||
if (args && (args = strchr (args, '<'))) /* Read it from a file */
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
/* Fixme: Factor this duplicated code out. */
|
||||
for (args++; spacep (args); args++)
|
||||
;
|
||||
fp = fopen (args, "rb");
|
||||
#if GNUPG_MAJOR_VERSION == 1
|
||||
if (fp && is_secured_file (fileno (fp)))
|
||||
{
|
||||
fclose (fp);
|
||||
fp = NULL;
|
||||
errno = EPERM;
|
||||
}
|
||||
#endif
|
||||
if (!fp)
|
||||
{
|
||||
tty_printf (_("can't open `%s': %s\n"), args, strerror (errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
data = xmalloc (254);
|
||||
n = fread (data, 1, 254, fp);
|
||||
fclose (fp);
|
||||
if (n < 0)
|
||||
{
|
||||
tty_printf (_("error reading `%s': %s\n"), args, strerror (errno));
|
||||
xfree (data);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
data = cpr_get ("cardedit.change_private_do",
|
||||
_("Private DO data: "));
|
||||
if (!data)
|
||||
return -1;
|
||||
trim_spaces (data);
|
||||
cpr_kill_prompt ();
|
||||
n = strlen (data);
|
||||
}
|
||||
|
||||
if (n > 254 )
|
||||
{
|
||||
tty_printf (_("Error: Private DO too long "
|
||||
"(limit is %d characters).\n"), 254);
|
||||
xfree (data);
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = agent_scd_setattr (do_name, data, n );
|
||||
if (rc)
|
||||
log_error ("error setting private DO: %s\n", gpg_strerror (rc));
|
||||
xfree (data);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
change_lang (void)
|
||||
{
|
||||
|
@ -1149,7 +1226,7 @@ card_edit (STRLIST commands)
|
|||
cmdNOP = 0,
|
||||
cmdQUIT, cmdADMIN, cmdHELP, cmdLIST, cmdDEBUG,
|
||||
cmdNAME, cmdURL, cmdFETCH, cmdLOGIN, cmdLANG, cmdSEX, cmdCAFPR,
|
||||
cmdFORCESIG, cmdGENERATE, cmdPASSWD,
|
||||
cmdFORCESIG, cmdGENERATE, cmdPASSWD, cmdPRIVATEDO,
|
||||
cmdINVCMD
|
||||
};
|
||||
|
||||
|
@ -1180,6 +1257,8 @@ card_edit (STRLIST commands)
|
|||
{ N_("generate"),
|
||||
cmdGENERATE, 1, N_("generate new keys") },
|
||||
{ N_("passwd"), cmdPASSWD, 0, N_("menu to change or unblock the PIN") },
|
||||
/* Note, that we do not announce this command yet. */
|
||||
{ N_("privatedo"), cmdPRIVATEDO, 0, NULL },
|
||||
{ NULL, cmdINVCMD, 0, NULL }
|
||||
};
|
||||
|
||||
|
@ -1335,6 +1414,14 @@ card_edit (STRLIST commands)
|
|||
change_cafpr (arg_number);
|
||||
break;
|
||||
|
||||
case cmdPRIVATEDO:
|
||||
if ( arg_number < 1 || arg_number > 4 )
|
||||
tty_printf ("usage: privatedo N\n"
|
||||
" 1 <= N <= 4\n");
|
||||
else
|
||||
change_private_do (arg_string, arg_number);
|
||||
break;
|
||||
|
||||
case cmdFORCESIG:
|
||||
toggle_forcesig ();
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue