summaryrefslogtreecommitdiffstats
path: root/scd
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2020-08-27 11:55:37 +0200
committerWerner Koch <wk@gnupg.org>2020-08-27 11:55:37 +0200
commita0a4744bd0640e587b33ec3dae819ec4054f0472 (patch)
treeece157a3a81e47c197406159b8e1ce3a146787c8 /scd
parentscd: Fix reading of the ATR for card type detection. (diff)
downloadgnupg2-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.c18
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