diff options
author | Werner Koch <wk@gnupg.org> | 2020-08-27 11:55:37 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2020-08-27 11:55:37 +0200 |
commit | a0a4744bd0640e587b33ec3dae819ec4054f0472 (patch) | |
tree | ece157a3a81e47c197406159b8e1ce3a146787c8 /scd | |
parent | scd: Fix reading of the ATR for card type detection. (diff) | |
download | gnupg2-a0a4744bd0640e587b33ec3dae819ec4054f0472.tar.xz gnupg2-a0a4744bd0640e587b33ec3dae819ec4054f0472.zip |
scd: New option to APDU command to return the ATR as data.
* scd/command.c (cmd_apdu): Add new option --data-atr.
* tools/gpg-card.c (cmd_apdu): Use that here. Also fix the --exlen
option and do not print the statusword in atr mode.
* tools/card-call-scd.c (scd_apdu): Detect atr mode anddon't assume a
status word.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'scd')
-rw-r--r-- | scd/command.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/scd/command.c b/scd/command.c index 018058b73..e2d366d47 100644 --- a/scd/command.c +++ b/scd/command.c @@ -1933,6 +1933,8 @@ cmd_apdu (assuan_context_t ctx, char *line) size_t exlen; if (has_option (line, "--dump-atr")) + with_atr = 3; + else if (has_option (line, "--data-atr")) with_atr = 2; else with_atr = has_option (line, "--atr"); @@ -1969,7 +1971,7 @@ cmd_apdu (assuan_context_t ctx, char *line) rc = gpg_error (GPG_ERR_INV_CARD); goto leave; } - if (with_atr == 2) + if (with_atr == 3) { char *string, *p, *pend; @@ -1986,7 +1988,19 @@ cmd_apdu (assuan_context_t ctx, char *line) rc = assuan_send_data (ctx, p, strlen (p)); es_free (string); if (rc) - goto leave; + { + xfree (atr); + goto leave; + } + } + } + else if (with_atr == 2) + { + rc = assuan_send_data (ctx, atr, atrlen); + if (rc) + { + xfree (atr); + goto leave; } } else |