diff options
-rw-r--r-- | ssh-pkcs11.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/ssh-pkcs11.c b/ssh-pkcs11.c index cae24525b..ec0e91865 100644 --- a/ssh-pkcs11.c +++ b/ssh-pkcs11.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssh-pkcs11.c,v 1.48 2020/03/06 18:14:13 markus Exp $ */ | 1 | /* $OpenBSD: ssh-pkcs11.c,v 1.49 2020/03/13 04:16:27 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2010 Markus Friedl. All rights reserved. | 3 | * Copyright (c) 2010 Markus Friedl. All rights reserved. |
4 | * Copyright (c) 2014 Pedro Martelletto. All rights reserved. | 4 | * Copyright (c) 2014 Pedro Martelletto. All rights reserved. |
@@ -271,9 +271,24 @@ pkcs11_login_slot(struct pkcs11_provider *provider, struct pkcs11_slotinfo *si, | |||
271 | (pin != NULL) ? strlen(pin) : 0); | 271 | (pin != NULL) ? strlen(pin) : 0); |
272 | if (pin != NULL) | 272 | if (pin != NULL) |
273 | freezero(pin, strlen(pin)); | 273 | freezero(pin, strlen(pin)); |
274 | if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) { | 274 | |
275 | error("C_Login failed: %lu", rv); | 275 | switch (rv) { |
276 | return (-1); | 276 | case CKR_OK: |
277 | case CKR_USER_ALREADY_LOGGED_IN: | ||
278 | /* success */ | ||
279 | break; | ||
280 | case CKR_PIN_LEN_RANGE: | ||
281 | error("PKCS#11 login failed: PIN length out of range"); | ||
282 | return -1; | ||
283 | case CKR_PIN_INCORRECT: | ||
284 | error("PKCS#11 login failed: PIN incorrect"); | ||
285 | return -1; | ||
286 | case CKR_PIN_LOCKED: | ||
287 | error("PKCS#11 login failed: PIN locked"); | ||
288 | return -1; | ||
289 | default: | ||
290 | error("PKCS#11 login failed: error %lu", rv); | ||
291 | return -1; | ||
277 | } | 292 | } |
278 | si->logged_in = 1; | 293 | si->logged_in = 1; |
279 | return (0); | 294 | return (0); |