|
Lines 121-127
Link Here
|
| 121 |
struct sc_pkcs15_prkey_info *key; |
121 |
struct sc_pkcs15_prkey_info *key; |
| 122 |
struct sc_pkcs15_object *pin_obj; |
122 |
struct sc_pkcs15_object *pin_obj; |
| 123 |
struct sc_pkcs15_pin_info *pin; |
123 |
struct sc_pkcs15_pin_info *pin; |
|
|
124 |
int detach_retry = 1; |
| 124 |
|
125 |
|
|
|
126 |
detachretry: |
| 125 |
priv = (struct sc_priv_data *) RSA_get_app_data(rsa); |
127 |
priv = (struct sc_priv_data *) RSA_get_app_data(rsa); |
| 126 |
if (priv == NULL) |
128 |
if (priv == NULL) |
| 127 |
return -1; |
129 |
return -1; |
|
Lines 159-164
Link Here
|
| 159 |
} |
161 |
} |
| 160 |
pin = pin_obj->data; |
162 |
pin = pin_obj->data; |
| 161 |
r = sc_lock(card); |
163 |
r = sc_lock(card); |
|
|
164 |
if (r == SC_ERROR_READER_DETACHED) { |
| 165 |
/* first retry after a plug fails; we'll try one more time */ |
| 166 |
debug("Retrying sc_lock() after receiving Error %d (%s)", r, sc_strerror(r)); |
| 167 |
detach_retry = 0; |
| 168 |
sc_close(); |
| 169 |
goto detachretry; |
| 170 |
} |
| 162 |
if (r) { |
171 |
if (r) { |
| 163 |
error("Unable to lock smartcard: %s", sc_strerror(r)); |
172 |
error("Unable to lock smartcard: %s", sc_strerror(r)); |
| 164 |
goto err; |
173 |
goto err; |