diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | scard-opensc.c | 13 |
2 files changed, 14 insertions, 3 deletions
@@ -8,6 +8,8 @@ | |||
8 | - (djm) Merge all the openbsd/fake-* into fake-rfc2553.[ch] | 8 | - (djm) Merge all the openbsd/fake-* into fake-rfc2553.[ch] |
9 | - (djm) Bug #588 - Add scard-opensc.o back to Makefile.in | 9 | - (djm) Bug #588 - Add scard-opensc.o back to Makefile.in |
10 | Patch from larsch@trustcenter.de | 10 | Patch from larsch@trustcenter.de |
11 | - (djm) Bug #589 - scard-opensc: load only keys with a private keys | ||
12 | Patch from larsch@trustcenter.de | ||
11 | 13 | ||
12 | 20030604 | 14 | 20030604 |
13 | - (djm) Bug #573 - Remove unneeded Krb headers and compat goop. Patch from | 15 | - (djm) Bug #573 - Remove unneeded Krb headers and compat goop. Patch from |
@@ -469,4 +471,4 @@ | |||
469 | - Fix sshd BindAddress and -b options for systems using fake-getaddrinfo. | 471 | - Fix sshd BindAddress and -b options for systems using fake-getaddrinfo. |
470 | Report from murple@murple.net, diagnosis from dtucker@zip.com.au | 472 | Report from murple@murple.net, diagnosis from dtucker@zip.com.au |
471 | 473 | ||
472 | $Id: ChangeLog,v 1.2786 2003/06/05 08:53:42 djm Exp $ | 474 | $Id: ChangeLog,v 1.2787 2003/06/05 09:19:35 djm Exp $ |
diff --git a/scard-opensc.c b/scard-opensc.c index c670428a1..9766d46cc 100644 --- a/scard-opensc.c +++ b/scard-opensc.c | |||
@@ -135,7 +135,11 @@ sc_prkey_op_init(RSA *rsa, struct sc_pkcs15_object **key_obj_out) | |||
135 | &pin_obj); | 135 | &pin_obj); |
136 | if (r == SC_ERROR_OBJECT_NOT_FOUND) { | 136 | if (r == SC_ERROR_OBJECT_NOT_FOUND) { |
137 | /* no pin required */ | 137 | /* no pin required */ |
138 | sc_lock(card); | 138 | r = sc_lock(card); |
139 | if (r) { | ||
140 | error("Unable to lock smartcard: %s", sc_strerror(r)); | ||
141 | goto err; | ||
142 | } | ||
139 | *key_obj_out = key_obj; | 143 | *key_obj_out = key_obj; |
140 | return 0; | 144 | return 0; |
141 | } else if (r) { | 145 | } else if (r) { |
@@ -429,9 +433,14 @@ sc_get_keys(const char *id, const char *pin) | |||
429 | } | 433 | } |
430 | key_count = r; | 434 | key_count = r; |
431 | } | 435 | } |
432 | /* FIXME: only keep entries with a corresponding private key */ | ||
433 | keys = xmalloc(sizeof(Key *) * (key_count*2+1)); | 436 | keys = xmalloc(sizeof(Key *) * (key_count*2+1)); |
434 | for (i = 0; i < key_count; i++) { | 437 | for (i = 0; i < key_count; i++) { |
438 | sc_pkcs15_object_t *tmp_obj = NULL; | ||
439 | cert_id = ((sc_pkcs15_cert_info_t *)(certs[i]->data))->id; | ||
440 | if (sc_pkcs15_find_prkey_by_id(p15card, &cert_id, &tmp_obj)) | ||
441 | /* skip the public key (certificate) if no | ||
442 | * corresponding private key is present */ | ||
443 | continue; | ||
435 | k = key_new(KEY_RSA); | 444 | k = key_new(KEY_RSA); |
436 | if (k == NULL) | 445 | if (k == NULL) |
437 | break; | 446 | break; |