]> andersk Git - openssh.git/commitdiff
- (djm) Bug #589 - scard-opensc: load only keys with a private keys
authordjm <djm>
Thu, 5 Jun 2003 09:19:35 +0000 (09:19 +0000)
committerdjm <djm>
Thu, 5 Jun 2003 09:19:35 +0000 (09:19 +0000)
   Patch from larsch@trustcenter.de

ChangeLog
scard-opensc.c

index f195dae0a4dc8f3b56f5471a5a6ac1acacc12cf4..bae2340297536aa0607096a6c9c4ad5afedc063e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,8 @@
  - (djm) Merge all the openbsd/fake-* into fake-rfc2553.[ch]
  - (djm) Bug #588 - Add scard-opensc.o back to Makefile.in
    Patch from larsch@trustcenter.de
+ - (djm) Bug #589 - scard-opensc: load only keys with a private keys
+   Patch from larsch@trustcenter.de
 
 20030604
  - (djm) Bug #573 - Remove unneeded Krb headers and compat goop. Patch from
index c670428a126298e8930501c987799d8421a3b2fd..9766d46ccaa44364c97736ebbdb72a9f083ca413 100644 (file)
@@ -135,7 +135,11 @@ sc_prkey_op_init(RSA *rsa, struct sc_pkcs15_object **key_obj_out)
                                          &pin_obj);
        if (r == SC_ERROR_OBJECT_NOT_FOUND) {
                /* no pin required */
-               sc_lock(card);
+               r = sc_lock(card);
+               if (r) {
+                       error("Unable to lock smartcard: %s", sc_strerror(r));
+                       goto err;
+               }
                *key_obj_out = key_obj;
                return 0;
        } else if (r) {
@@ -429,9 +433,14 @@ sc_get_keys(const char *id, const char *pin)
                }
                key_count = r;
        }
-       /* FIXME: only keep entries with a corresponding private key */
        keys = xmalloc(sizeof(Key *) * (key_count*2+1));
        for (i = 0; i < key_count; i++) {
+               sc_pkcs15_object_t *tmp_obj = NULL;
+               cert_id = ((sc_pkcs15_cert_info_t *)(certs[i]->data))->id;
+               if (sc_pkcs15_find_prkey_by_id(p15card, &cert_id, &tmp_obj))
+                       /* skip the public key (certificate) if no
+                        * corresponding private key is present */
+                       continue;
                k = key_new(KEY_RSA);
                if (k == NULL)
                        break;
This page took 0.580294 seconds and 5 git commands to generate.