diff options
| author | Werner Koch <[email protected]> | 2019-06-25 07:48:18 +0000 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2019-06-25 07:48:18 +0000 |
| commit | 92ba831758cff0262504ac51e5df7a439844327c (patch) | |
| tree | ffe322a44bef967d303b80e48d502c31d9ed936a /scd/command.c | |
| parent | scd: Return a stable list with "getinfo card_list". (diff) | |
| download | gnupg-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.c | 14 |
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; } |
