mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
* g10.c: New command --card-edit.
* card-util.c (card_status): Use tty_fprintf for all output. (print_sha1_fpr, print_isoname): Ditto. (get_one_name,change_name, change_url, change_login,change_lang) (change_sex): New; taken from keygen.c. * keygen.c (smartcard_get_one_name, smartcard_change_name) (smartcard_change_url, smartcard_change_login_data) (smartcard_change_lang, smartcard_change_sex): Removed. (check_smartcard): Removed most menu items.
This commit is contained in:
parent
210b725748
commit
918eee7195
6 changed files with 420 additions and 251 deletions
210
g10/keygen.c
210
g10/keygen.c
|
@ -2860,184 +2860,6 @@ show_smartcard (struct agent_card_info_s *info)
|
|||
free_public_key( pk );
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
smartcard_get_one_name (const char *prompt1, const char *prompt2)
|
||||
{
|
||||
char *name;
|
||||
int i;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
name = cpr_get (prompt1, prompt2);
|
||||
if (!name)
|
||||
return NULL;
|
||||
trim_spaces (name);
|
||||
cpr_kill_prompt ();
|
||||
for (i=0; name[i] && name[i] >= ' ' && name[i] <= 126; i++)
|
||||
;
|
||||
|
||||
/* The name must be in Latin-1 and not UTF-8 - lacking the code
|
||||
to ensure this we restrict it to ASCII. */
|
||||
if (name[i])
|
||||
tty_printf (_("Error: Only plain ASCII is currently allowed.\n"));
|
||||
else if (strchr (name, '<'))
|
||||
tty_printf (_("Error: The \"<\" character may not be used.\n"));
|
||||
else if (strstr (name, " "))
|
||||
tty_printf (_("Error: Double spaces are not allowed.\n"));
|
||||
else
|
||||
return name;
|
||||
xfree (name);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
smartcard_change_name (const char *current_name)
|
||||
{
|
||||
char *surname = NULL, *givenname = NULL;
|
||||
char *isoname, *p;
|
||||
int rc;
|
||||
|
||||
surname = smartcard_get_one_name ("keygen.smartcard.surname",
|
||||
_("Cardholder's surname: "));
|
||||
givenname = smartcard_get_one_name ("keygen.smartcard.givenname",
|
||||
_("Cardholder's given name: "));
|
||||
if (!surname || !givenname || (!*surname && !*givenname))
|
||||
{
|
||||
xfree (surname);
|
||||
xfree (givenname);
|
||||
return -1; /*canceled*/
|
||||
}
|
||||
|
||||
isoname = xmalloc ( strlen (surname) + 2 + strlen (givenname) + 1);
|
||||
strcpy (stpcpy (stpcpy (isoname, surname), "<<"), givenname);
|
||||
xfree (surname);
|
||||
xfree (givenname);
|
||||
for (p=isoname; *p; p++)
|
||||
if (*p == ' ')
|
||||
*p = '<';
|
||||
|
||||
log_debug ("setting Name to `%s'\n", isoname);
|
||||
rc = agent_scd_setattr ("DISP-NAME", isoname, strlen (isoname) );
|
||||
if (rc)
|
||||
log_error ("error setting Name: %s\n", gpg_strerror (rc));
|
||||
|
||||
xfree (isoname);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
smartcard_change_url (const char *current_url)
|
||||
{
|
||||
char *url;
|
||||
int rc;
|
||||
|
||||
url = cpr_get ("keygen.smartcard.url", _("URL to retrieve public key: "));
|
||||
if (!url)
|
||||
return -1;
|
||||
trim_spaces (url);
|
||||
cpr_kill_prompt ();
|
||||
|
||||
rc = agent_scd_setattr ("PUBKEY-URL", url, strlen (url) );
|
||||
if (rc)
|
||||
log_error ("error setting URL: %s\n", gpg_strerror (rc));
|
||||
xfree (url);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
smartcard_change_login_data (void)
|
||||
{
|
||||
char *data;
|
||||
int rc;
|
||||
|
||||
data = cpr_get ("keygen.smartcard.login_data",
|
||||
_("Login data (account name): "));
|
||||
if (!data)
|
||||
return -1;
|
||||
trim_spaces (data);
|
||||
cpr_kill_prompt ();
|
||||
|
||||
rc = agent_scd_setattr ("LOGIN-DATA", data, strlen (data) );
|
||||
if (rc)
|
||||
log_error ("error setting login data: %s\n", gpg_strerror (rc));
|
||||
xfree (data);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
smartcard_change_lang (void)
|
||||
{
|
||||
char *data, *p;
|
||||
int rc;
|
||||
|
||||
data = cpr_get ("keygen.smartcard.lang",
|
||||
_("Language preferences: "));
|
||||
if (!data)
|
||||
return -1;
|
||||
trim_spaces (data);
|
||||
cpr_kill_prompt ();
|
||||
|
||||
if (strlen (data) > 8 || (strlen (data) & 1))
|
||||
{
|
||||
tty_printf (_("Error: invalid length of preference string.\n"));
|
||||
xfree (data);
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (p=data; *p && *p >= 'a' && *p <= 'z'; p++)
|
||||
;
|
||||
if (*p)
|
||||
{
|
||||
tty_printf (_("Error: invalid characters in preference string.\n"));
|
||||
xfree (data);
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = agent_scd_setattr ("DISP-LANG", data, strlen (data) );
|
||||
if (rc)
|
||||
log_error ("error setting lang: %s\n", gpg_strerror (rc));
|
||||
xfree (data);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
smartcard_change_sex (void)
|
||||
{
|
||||
char *data;
|
||||
const char *str;
|
||||
int rc;
|
||||
|
||||
data = cpr_get ("keygen.smartcard.sex",
|
||||
_("Sex ((M)ale, (F)emale or space): "));
|
||||
if (!data)
|
||||
return -1;
|
||||
trim_spaces (data);
|
||||
cpr_kill_prompt ();
|
||||
|
||||
if (!*data)
|
||||
str = "9";
|
||||
else if ((*data == 'M' || *data == 'm') && !data[1])
|
||||
str = "1";
|
||||
else if ((*data == 'F' || *data == 'f') && !data[1])
|
||||
str = "2";
|
||||
else
|
||||
{
|
||||
tty_printf (_("Error: invalid response.\n"));
|
||||
xfree (data);
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = agent_scd_setattr ("DISP-SEX", str, 1 );
|
||||
if (rc)
|
||||
log_error ("error setting sex: %s\n", gpg_strerror (rc));
|
||||
xfree (data);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
/* Return true if the SHA1 fingerprint FPR consists only of zeroes. */
|
||||
static int
|
||||
fpr_is_zero (const char *fpr)
|
||||
|
@ -3083,11 +2905,6 @@ check_smartcard (char **r_serialno)
|
|||
show_smartcard (&info);
|
||||
|
||||
tty_printf ("\n"
|
||||
"N - change cardholder name\n"
|
||||
"U - change public key URL\n"
|
||||
"D - change login data\n"
|
||||
"L - change language preferences\n"
|
||||
"S - change sex\n"
|
||||
"K - generate all keys\n"
|
||||
"Q - quit\n"
|
||||
"\n");
|
||||
|
@ -3098,32 +2915,7 @@ check_smartcard (char **r_serialno)
|
|||
continue;
|
||||
|
||||
rc = 0;
|
||||
if ( *answer == 'N' || *answer == 'n')
|
||||
{
|
||||
if (!smartcard_change_name (info.disp_name))
|
||||
reread = 1;
|
||||
}
|
||||
else if ( *answer == 'U' || *answer == 'u')
|
||||
{
|
||||
if (!smartcard_change_url (info.pubkey_url))
|
||||
reread = 1;
|
||||
}
|
||||
else if ( *answer == 'D' || *answer == 'd')
|
||||
{
|
||||
if (!smartcard_change_login_data ())
|
||||
reread = 1;
|
||||
}
|
||||
else if ( *answer == 'L' || *answer == 'l')
|
||||
{
|
||||
if (!smartcard_change_lang ())
|
||||
reread = 1;
|
||||
}
|
||||
else if ( *answer == 'S' || *answer == 's')
|
||||
{
|
||||
if (!smartcard_change_sex ())
|
||||
reread = 1;
|
||||
}
|
||||
else if ( *answer == 'K' || *answer == 'k')
|
||||
if ( *answer == 'K' || *answer == 'k')
|
||||
{
|
||||
if ( (info.fpr1valid && !fpr_is_zero (info.fpr1))
|
||||
|| (info.fpr2valid && !fpr_is_zero (info.fpr2))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue