mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
* call-scd.c (unescape_status_string): New. Actual a copy of
../g10/call-agent.c (card_getattr_cb, agent_card_getattr): New. * command-ssh.c (card_key_available): New. (ssh_handler_request_identities): First see whether a card key is available. * app.c (app_getattr): Return APPTYPE or SERIALNO type even if the application does dot support the getattr call. * app.c (select_application): Return an error code and the application context in an new arg. * command.c (open_card): Adjusted for that. Don't use the fallback if no card is present. Return an error if the card has been removed without a reset. (do_reset, cmd_serialno): Clear that error flag. (TEST_CARD_REMOVAL): New. Use it with all command handlers. (scd_update_reader_status_file): Set the error flag on all changes.
This commit is contained in:
parent
3af261572b
commit
1f1f28555a
7 changed files with 320 additions and 81 deletions
29
scd/app.c
29
scd/app.c
|
@ -305,6 +305,35 @@ app_getattr (APP app, CTRL ctrl, const char *name)
|
|||
return gpg_error (GPG_ERR_INV_VALUE);
|
||||
if (!app->initialized)
|
||||
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
|
||||
|
||||
if (app->apptype && name && !strcmp (name, "APPTYPE"))
|
||||
{
|
||||
send_status_info (ctrl, "APPTYPE",
|
||||
app->apptype, strlen (app->apptype), NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
if (name && !strcmp (name, "SERIALNO"))
|
||||
{
|
||||
char *serial_and_stamp;
|
||||
char *serial;
|
||||
time_t stamp;
|
||||
int rc;
|
||||
|
||||
rc = app_get_serial_and_stamp (app, &serial, &stamp);
|
||||
if (rc)
|
||||
return rc;
|
||||
rc = asprintf (&serial_and_stamp, "%s %lu",
|
||||
serial, (unsigned long)stamp);
|
||||
rc = (rc < 0)? gpg_error_from_errno (errno) : 0;
|
||||
xfree (serial);
|
||||
if (rc)
|
||||
return rc;
|
||||
send_status_info (ctrl, "SERIALNO",
|
||||
serial_and_stamp, strlen (serial_and_stamp), NULL, 0);
|
||||
free (serial_and_stamp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!app->fnc.getattr)
|
||||
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
|
||||
return app->fnc.getattr (app, ctrl, name);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue