YKPIV: Make sure that context is established only if it is invalid.
This commit is contained in:
+5
-3
@@ -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,6 +205,7 @@ ykpiv_rc ykpiv_list_readers(ykpiv_state *state, char *readers, size_t *len) {
|
||||
unsigned long num_readers = 0;
|
||||
long 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) {
|
||||
@@ -212,6 +213,7 @@ ykpiv_rc ykpiv_list_readers(ykpiv_state *state, char *readers, size_t *len) {
|
||||
}
|
||||
return YKPIV_PCSC_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
rc = SCardListReaders(state->context, NULL, NULL, &num_readers);
|
||||
if (rc != SCARD_S_SUCCESS) {
|
||||
|
||||
Reference in New Issue
Block a user