mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
card: Run factory-reset in locked stated also in gpg-card.
* tools/card-call-scd.c (scd_apdu): Add more pseudo APDUs. * tools/card-misc.c (send_apdu): Handle them. * tools/gpg-card.c (cmd_factoryreset): Use lock commands. -- This is port of the code used with gpg-card-edit. Note that the command "apdu" now also understands some extra keywords. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
8fb0d5e3c7
commit
12fd10791f
4 changed files with 57 additions and 12 deletions
|
@ -421,9 +421,16 @@ store_serialno (const char *line)
|
|||
|
||||
/* Send an APDU to the current card. On success the status word is
|
||||
* stored at R_SW inless R_SW is NULL. With HEXAPDU being NULL only a
|
||||
* RESET command is send to scd. With HEXAPDU being the string
|
||||
* "undefined" the command "SERIALNO undefined" is send to scd. If
|
||||
* R_DATA is not NULL the data without the status code is stored
|
||||
* RESET command is send to scd. HEXAPDU may also be one of theseo
|
||||
* special strings:
|
||||
*
|
||||
* "undefined" :: Send the command "SCD SERIALNO undefined"
|
||||
* "lock" :: Send the command "SCD LOCK --wait"
|
||||
* "trylock" :: Send the command "SCD LOCK"
|
||||
* "unlock" :: Send the command "SCD UNLOCK"
|
||||
* "reset-keep-lock" :: Send the command "SCD RESET --keep-lock"
|
||||
*
|
||||
* If R_DATA is not NULL the data without the status code is stored
|
||||
* there. Caller must release it. If OPTIONS is not NULL, this will
|
||||
* be passed verbatim to the SCDaemon's APDU command. */
|
||||
gpg_error_t
|
||||
|
@ -447,6 +454,26 @@ scd_apdu (const char *hexapdu, const char *options, unsigned int *r_sw,
|
|||
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
}
|
||||
else if (!strcmp (hexapdu, "reset-keep-lock"))
|
||||
{
|
||||
err = assuan_transact (agent_ctx, "SCD RESET --keep-lock",
|
||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
else if (!strcmp (hexapdu, "lock"))
|
||||
{
|
||||
err = assuan_transact (agent_ctx, "SCD LOCK --wait",
|
||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
else if (!strcmp (hexapdu, "trylock"))
|
||||
{
|
||||
err = assuan_transact (agent_ctx, "SCD LOCK",
|
||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
else if (!strcmp (hexapdu, "unlock"))
|
||||
{
|
||||
err = assuan_transact (agent_ctx, "SCD UNLOCK",
|
||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
else if (!strcmp (hexapdu, "undefined"))
|
||||
{
|
||||
err = assuan_transact (agent_ctx, "SCD SERIALNO undefined",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue