YKPIV: Make sure that context is established only if it is invalid.

This commit is contained in:
Alessio Di Mauro
2015-11-10 11:12:21 +01:00
parent c49f1f0c51
commit f2a3a3acc1
+5 -3
View File
@@ -103,7 +103,7 @@ ykpiv_rc ykpiv_init(ykpiv_state **state, int verbose) {
} }
memset(s, 0, sizeof(ykpiv_state)); memset(s, 0, sizeof(ykpiv_state));
s->verbose = verbose; s->verbose = verbose;
s->context = -1; s->context = SCARD_E_INVALID_HANDLE;
*state = s; *state = s;
return YKPIV_OK; return YKPIV_OK;
} }
@@ -120,9 +120,9 @@ ykpiv_rc ykpiv_disconnect(ykpiv_state *state) {
state->card = 0; state->card = 0;
} }
if(state->context) { if(SCardIsValidContext(state->context) == SCARD_S_SUCCESS) {
SCardReleaseContext(state->context); SCardReleaseContext(state->context);
state->context = 0; state->context = SCARD_E_INVALID_HANDLE;
} }
return YKPIV_OK; 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; unsigned long num_readers = 0;
long rc; long rc;
if(SCardIsValidContext(state->context) != SCARD_S_SUCCESS) {
rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &state->context); rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &state->context);
if (rc != SCARD_S_SUCCESS) { if (rc != SCARD_S_SUCCESS) {
if(state->verbose) { if(state->verbose) {
@@ -212,6 +213,7 @@ ykpiv_rc ykpiv_list_readers(ykpiv_state *state, char *readers, size_t *len) {
} }
return YKPIV_PCSC_ERROR; return YKPIV_PCSC_ERROR;
} }
}
rc = SCardListReaders(state->context, NULL, NULL, &num_readers); rc = SCardListReaders(state->context, NULL, NULL, &num_readers);
if (rc != SCARD_S_SUCCESS) { if (rc != SCARD_S_SUCCESS) {