summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/card-call-scd.c10
-rw-r--r--tools/gpg-card.c9
2 files changed, 13 insertions, 6 deletions
diff --git a/tools/card-call-scd.c b/tools/card-call-scd.c
index 8e029a2bf..160d9480e 100644
--- a/tools/card-call-scd.c
+++ b/tools/card-call-scd.c
@@ -485,9 +485,13 @@ scd_apdu (const char *hexapdu, const char *options, unsigned int *r_sw,
membuf_t mb;
unsigned char *data;
size_t datalen;
+ int no_sw;
init_membuf (&mb, 256);
+ no_sw = (options && (strstr (options, "--dump-atr")
+ || strstr (options, "--data-atr")));
+
snprintf (line, DIM(line), "SCD APDU %s%s%s",
options?options:"", options?" -- ":"", hexapdu);
err = assuan_transact (agent_ctx, line,
@@ -497,16 +501,16 @@ scd_apdu (const char *hexapdu, const char *options, unsigned int *r_sw,
data = get_membuf (&mb, &datalen);
if (!data)
err = gpg_error_from_syserror ();
- else if (datalen < 2) /* Ooops */
+ else if (datalen < (no_sw?1:2)) /* Ooops */
err = gpg_error (GPG_ERR_CARD);
else
{
if (r_sw)
- *r_sw = buf16_to_uint (data+datalen-2);
+ *r_sw = no_sw? 0 : buf16_to_uint (data+datalen-2);
if (r_data && r_datalen)
{
*r_data = data;
- *r_datalen = datalen - 2;
+ *r_datalen = datalen - (no_sw?0:2);
data = NULL;
}
}
diff --git a/tools/gpg-card.c b/tools/gpg-card.c
index bf3663924..9238b4759 100644
--- a/tools/gpg-card.c
+++ b/tools/gpg-card.c
@@ -3472,14 +3472,17 @@ cmd_apdu (card_info_t info, char *argstr)
if (with_atr || handle_more || exlenstr)
options = xasprintf ("%s%s%s%.*s",
- with_atr == 2? " --dump-atr": with_atr? " --atr":"",
+ with_atr == 2? " --dump-atr":
+ with_atr? " --data-atr":"",
handle_more?" --more":"",
- exlenstr?" ":"", exlenstrlen, exlenstr?exlenstr:"");
+ exlenstr?" --exlen=":"",
+ exlenstrlen, exlenstr?exlenstr:"");
err = scd_apdu (argstr, options, &sw, &result, &resultlen);
if (err)
goto leave;
- log_info ("Statusword: 0x%04x\n", sw);
+ if (!with_atr)
+ log_info ("Statusword: 0x%04x\n", sw);
for (i=0; i < resultlen; )
{
size_t save_i = i;