diff -urNp pam_pkcs11-0.5.3/src/common/pkcs11.c pam_pkcs11-0.5.3.new/src/common/pkcs11.c
|
old
|
new
|
|
| 82 | 82 | |
| 83 | 83 | /* initialise the module */ |
| 84 | 84 | rv = h->fl->C_Initialize(NULL); |
| 85 | | if (rv != CKR_OK) { |
| | 85 | if (rv == CKR_OK) |
| | 86 | h->should_finalize = 1; |
| | 87 | else if (rv != CKR_CRYPTOKI_ALREADY_INITIALIZED) { |
| 86 | 88 | set_error("C_Initialize() failed: %x", rv); |
| 87 | 89 | return -1; |
| 88 | 90 | } |
| … |
… |
|
| 170 | 172 | { |
| 171 | 173 | /* finalise pkcs #11 module */ |
| 172 | 174 | if (h->fl != NULL) |
| 173 | | h->fl->C_Finalize(NULL); |
| | 175 | if (h->should_finalize) |
| | 176 | h->fl->C_Finalize(NULL); |
| 174 | 177 | /* unload the module */ |
| 175 | 178 | if (h->module_handle != NULL) |
| 176 | 179 | dlclose(h->module_handle); |
diff -urNp pam_pkcs11-0.5.3/src/common/pkcs11.h pam_pkcs11-0.5.3.new/src/common/pkcs11.h
|
old
|
new
|
|
| 136 | 136 | typedef struct { |
| 137 | 137 | void *module_handle; |
| 138 | 138 | CK_FUNCTION_LIST_PTR fl; |
| | 139 | int should_finalize; |
| 139 | 140 | slot_t *slots; |
| 140 | 141 | CK_ULONG slot_count; |
| 141 | 142 | CK_SESSION_HANDLE session; |
diff -urNp pam_pkcs11-0.5.3/src/tools/pkcs11_eventmgr.c pam_pkcs11-0.5.3.new/src/tools/pkcs11_eventmgr.c
|
old
|
new
|
|
| 283 | 283 | return 1; |
| 284 | 284 | } |
| 285 | 285 | |
| 286 | | /* open pkcs11 sesion */ |
| 287 | | DBG("initialising pkcs #11 module..."); |
| 288 | | rv = ph.fl->C_Initialize(NULL); |
| 289 | | if (rv != 0) { |
| 290 | | release_pkcs11_module(&ph); |
| 291 | | DBG1("C_Initialize() failed: %d", rv); |
| 292 | | return 1; |
| 293 | | } |
| 294 | | |
| 295 | 286 | /* put my self into background if flag is set */ |
| 296 | 287 | if (daemonize) { |
| 297 | 288 | DBG("Going to be daemon..."); |
| … |
… |
|
| 303 | 294 | } |
| 304 | 295 | } |
| 305 | 296 | |
| | 297 | /* open pkcs11 sesion */ |
| | 298 | DBG("initialising pkcs #11 module..."); |
| | 299 | rv = ph.fl->C_Initialize(NULL); |
| | 300 | if (rv != 0) { |
| | 301 | release_pkcs11_module(&ph); |
| | 302 | if (ctx) scconf_free(ctx); |
| | 303 | DBG1("C_Initialize() failed: %d", rv); |
| | 304 | return 1; |
| | 305 | } |
| | 306 | ph.should_finalize = 1; |
| | 307 | |
| 306 | 308 | /* |
| 307 | 309 | * Wait endlessly for all events in the list of readers |
| 308 | 310 | * We only stop in case of an error |
| … |
… |
|
| 324 | 326 | new_state = get_a_token(); |
| 325 | 327 | if (new_state == CARD_ERROR) { |
| 326 | 328 | DBG("Error trying to get a token"); |
| 327 | | break; |
| | 329 | rv = ph.fl->C_Finalize(NULL); |
| | 330 | rv = ph.fl->C_Initialize(NULL); |
| | 331 | continue; |
| 328 | 332 | } |
| 329 | 333 | if (old_state == new_state ) { /* state unchanged */ |
| 330 | 334 | /* on card not present, increase and check expire time */ |