From 7b7f164bfc679be1351c8635f01a6d887da1ca1f Mon Sep 17 00:00:00 2001 From: djm Date: Thu, 5 Jun 2003 09:19:35 +0000 Subject: [PATCH] - (djm) Bug #589 - scard-opensc: load only keys with a private keys Patch from larsch@trustcenter.de --- ChangeLog | 2 ++ scard-opensc.c | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f195dae0..bae23402 100644 --- 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 diff --git a/scard-opensc.c b/scard-opensc.c index c670428a..9766d46c 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) &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; -- 2.45.1