[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