[pkg-opensc-commit] [libp11] 52/67: Fixes from p11_key.c ported to p11_cert.c

Eric Dorland eric at moszumanska.debian.org
Sat Jan 30 05:34:16 UTC 2016


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository libp11.

commit e51d1d0b8e9795c204f949a7ac6b4c40c38cb36f
Author: Michał Trojnara <Michal.Trojnara at stunnel.org>
Date:   Sun Jan 17 15:35:21 2016 +0100

    Fixes from p11_key.c ported to p11_cert.c
---
 src/p11_cert.c | 32 ++++++++++++++++++++------------
 src/p11_key.c  |  7 +++----
 2 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/src/p11_cert.c b/src/p11_cert.c
index 2c91666..481518f 100644
--- a/src/p11_cert.c
+++ b/src/p11_cert.c
@@ -38,17 +38,24 @@ int
 PKCS11_enumerate_certs(PKCS11_TOKEN * token,
 		PKCS11_CERT ** certp, unsigned int *countp)
 {
-	PKCS11_TOKEN_private *priv = PRIVTOKEN(token);
+	PKCS11_TOKEN_private *tpriv = PRIVTOKEN(token);
+	PKCS11_CTX *ctx = TOKEN2CTX(token);
+	PKCS11_CTX_private *cpriv = PRIVCTX(ctx);
+	int rv;
 
-	if (priv->ncerts < 0) {
-		priv->ncerts = 0;
-		if (pkcs11_find_certs(token)) {
+	if (tpriv->ncerts < 0) {
+		pkcs11_w_lock(cpriv->lockid);
+		rv = pkcs11_find_certs(token);
+		pkcs11_w_unlock(cpriv->lockid);
+		if (rv < 0) {
 			pkcs11_destroy_certs(token);
 			return -1;
 		}
 	}
-	*certp = priv->certs;
-	*countp = priv->ncerts;
+	if (certp)
+		*certp = tpriv->certs;
+	if (countp)
+		*countp = tpriv->ncerts;
 	return 0;
 }
 
@@ -79,14 +86,14 @@ PKCS11_CERT *PKCS11_find_certificate(PKCS11_KEY * key)
  */
 static int pkcs11_find_certs(PKCS11_TOKEN * token)
 {
+	PKCS11_TOKEN_private *tpriv = PRIVTOKEN(token);
+	PKCS11_SLOT *slot = TOKEN2SLOT(token);
+	PKCS11_CTX *ctx = TOKEN2CTX(token);
+	CK_SESSION_HANDLE session;
 	CK_OBJECT_CLASS cert_search_class;
 	CK_ATTRIBUTE cert_search_attrs[] = {
 		{CKA_CLASS, &cert_search_class, sizeof(cert_search_class)},
 	};
-
-	PKCS11_SLOT *slot = TOKEN2SLOT(token);
-	PKCS11_CTX *ctx = TOKEN2CTX(token);
-	CK_SESSION_HANDLE session;
 	int rv, res = -1;
 
 	/* Make sure we have a session */
@@ -99,11 +106,13 @@ static int pkcs11_find_certs(PKCS11_TOKEN * token)
 	rv = CRYPTOKI_call(ctx, C_FindObjectsInit(session, cert_search_attrs, 1));
 	CRYPTOKI_checkerr(PKCS11_F_PKCS11_ENUM_CERTS, rv);
 
+	tpriv->ncerts = 0;
 	do {
 		res = pkcs11_next_cert(ctx, token, session);
 	} while (res == 0);
 
 	CRYPTOKI_call(ctx, C_FindObjectsFinal(session));
+
 	return (res < 0) ? -1 : 0;
 }
 
@@ -199,7 +208,6 @@ static int pkcs11_init_cert(PKCS11_CTX * ctx, PKCS11_TOKEN * token,
 
 	if (ret)
 		*ret = cert;
-
 	return 0;
 }
 
@@ -223,8 +231,8 @@ void pkcs11_destroy_certs(PKCS11_TOKEN * token)
 	}
 	if (priv->certs)
 		OPENSSL_free(priv->certs);
-	priv->ncerts = -1;
 	priv->certs = NULL;
+	priv->ncerts = -1;
 }
 
 /*
diff --git a/src/p11_key.c b/src/p11_key.c
index 57ccd21..452f60b 100644
--- a/src/p11_key.c
+++ b/src/p11_key.c
@@ -353,14 +353,13 @@ static int pkcs11_find_keys(PKCS11_TOKEN * token, unsigned int type)
 {
 	PKCS11_TOKEN_private *tpriv = PRIVTOKEN(token);
 	PKCS11_keys *keys = (type == CKO_PRIVATE_KEY) ? &tpriv->prv : &tpriv->pub;
+	PKCS11_SLOT *slot = TOKEN2SLOT(token);
+	PKCS11_SLOT_private *spriv = PRIVSLOT(slot);
+	PKCS11_CTX *ctx = TOKEN2CTX(token);
 	CK_OBJECT_CLASS key_search_class;
 	CK_ATTRIBUTE key_search_attrs[1] = {
 		{CKA_CLASS, &key_search_class, sizeof(key_search_class)},
 	};
-
-	PKCS11_SLOT *slot = TOKEN2SLOT(token);
-	PKCS11_SLOT_private *spriv = PRIVSLOT(slot);
-	PKCS11_CTX *ctx = TOKEN2CTX(token);
 	int rv, res = -1;
 
 	/* Make sure we have a session */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-opensc/libp11.git



More information about the pkg-opensc-commit mailing list