aboutsummaryrefslogtreecommitdiffstats
path: root/scd/command.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-06-25 07:48:18 +0000
committerWerner Koch <[email protected]>2019-06-25 07:48:18 +0000
commit92ba831758cff0262504ac51e5df7a439844327c (patch)
treeffe322a44bef967d303b80e48d502c31d9ed936a /scd/command.c
parentscd: Return a stable list with "getinfo card_list". (diff)
downloadgnupg-92ba831758cff0262504ac51e5df7a439844327c.tar.gz
gnupg-92ba831758cff0262504ac51e5df7a439844327c.zip
scd: Do not conflict if a card with another serialno is demanded.
* scd/app.c (check_application_conflict): Add args to pass a serialno. * scd/command.c (open_card_with_request): Pass the serialno to check_application_conflict. -- Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'scd/command.c')
-rw-r--r--scd/command.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/scd/command.c b/scd/command.c
index f341b6ae2..0096ca96d 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -228,18 +228,22 @@ open_card_with_request (ctrl_t ctrl,
size_t serialno_bin_len = 0;
card_t card = ctrl->card_ctx;
+ if (serialno)
+ serialno_bin = hex_to_buffer (serialno, &serialno_bin_len);
+
/* If we are already initialized for one specific application we
need to check that the client didn't requested a specific
application different from the one in use before we continue. */
if (apptypestr && ctrl->card_ctx)
{
- err = check_application_conflict (ctrl->card_ctx, apptypestr);
+ err = check_application_conflict (ctrl->card_ctx, apptypestr,
+ serialno_bin, serialno_bin_len);
if (gpg_err_code (err) == GPG_ERR_FALSE)
{
/* Different application but switching is supported. */
err = select_additional_application (ctrl, apptypestr);
}
- return err;
+ goto leave;
}
/* Re-scan USB devices. Release CARD, before the scan. */
@@ -247,13 +251,11 @@ open_card_with_request (ctrl_t ctrl,
ctrl->card_ctx = NULL;
card_unref (card);
- if (serialno)
- serialno_bin = hex_to_buffer (serialno, &serialno_bin_len);
-
err = select_application (ctrl, apptypestr, &ctrl->card_ctx, 1,
serialno_bin, serialno_bin_len);
- xfree (serialno_bin);
+ leave:
+ xfree (serialno_bin);
return err;
}