summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2003-06-05 19:19:35 +1000
committerDamien Miller <djm@mindrot.org>2003-06-05 19:19:35 +1000
commit76b5c8a83acab596c45624a5353b0ad5930321b3 (patch)
tree36b1c2f8a10a9c5aedbab6792ba6fa2e6e8d7855
parentf49078dfdfaaaa323fa133a3e97c4b7f88510163 (diff)
- (djm) Bug #589 - scard-opensc: load only keys with a private keys
Patch from larsch@trustcenter.de
-rw-r--r--ChangeLog4
-rw-r--r--scard-opensc.c13
2 files changed, 14 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 3fa476dc3..47891b52d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
1220030604 1420030604
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;