From f2a3a3acc12406538798339168e4c7489cbee4e2 Mon Sep 17 00:00:00 2001 From: Alessio Di Mauro Date: Tue, 10 Nov 2015 11:12:21 +0100 Subject: [PATCH] YKPIV: Make sure that context is established only if it is invalid. --- lib/ykpiv.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/ykpiv.c b/lib/ykpiv.c index 0a8e830..87a1481 100644 --- a/lib/ykpiv.c +++ b/lib/ykpiv.c @@ -103,7 +103,7 @@ ykpiv_rc ykpiv_init(ykpiv_state **state, int verbose) { } memset(s, 0, sizeof(ykpiv_state)); s->verbose = verbose; - s->context = -1; + s->context = SCARD_E_INVALID_HANDLE; *state = s; return YKPIV_OK; } @@ -120,9 +120,9 @@ ykpiv_rc ykpiv_disconnect(ykpiv_state *state) { state->card = 0; } - if(state->context) { + if(SCardIsValidContext(state->context) == SCARD_S_SUCCESS) { SCardReleaseContext(state->context); - state->context = 0; + state->context = SCARD_E_INVALID_HANDLE; } return YKPIV_OK; @@ -205,12 +205,14 @@ ykpiv_rc ykpiv_list_readers(ykpiv_state *state, char *readers, size_t *len) { unsigned long num_readers = 0; long rc; - rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &state->context); - if (rc != SCARD_S_SUCCESS) { - if(state->verbose) { - fprintf (stderr, "error: SCardEstablishContext failed, rc=%08lx\n", rc); + if(SCardIsValidContext(state->context) != SCARD_S_SUCCESS) { + rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &state->context); + if (rc != SCARD_S_SUCCESS) { + if(state->verbose) { + fprintf (stderr, "error: SCardEstablishContext failed, rc=%08lx\n", rc); + } + return YKPIV_PCSC_ERROR; } - return YKPIV_PCSC_ERROR; } rc = SCardListReaders(state->context, NULL, NULL, &num_readers);