summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRich Megginson <rmeggins@redhat.com>2009-12-17 14:52:44 -0700
committerRob Crittenden <rcritten@redhat.com>2010-04-12 16:50:56 -0400
commit36c0348e68e7aa8126b1e1f78c83de0979973c1b (patch)
tree14db86cdce1671e05cd7d7395f2671739757f1bd
parentdb8838516783d5b0bcdecaa08e770812c64af8ee (diff)
downloadpemnss-36c0348e68e7aa8126b1e1f78c83de0979973c1b.zip
pemnss-36c0348e68e7aa8126b1e1f78c83de0979973c1b.tar.gz
pemnss-36c0348e68e7aa8126b1e1f78c83de0979973c1b.tar.xz
Allow collect_objects() to search through all objectclasses
Added a pemAll to pemObjectType enum - changed collect_objects() to look through all types of objects if the caller did not specify a particular type of object to look for - some of the PK11 routines do not specify the type e.g. PK11_FindObjectForCert(): CK_ATTRIBUTE searchTemplate = { CKA_VALUE, NULL, 0 }; PK11_SETATTRS(&searchTemplate, CKA_VALUE, cert->derCert.data, cert->derCert.len);
-rw-r--r--ckpem.h1
-rw-r--r--pfind.c18
2 files changed, 13 insertions, 6 deletions
diff --git a/ckpem.h b/ckpem.h
index be74843..839d40b 100644
--- a/ckpem.h
+++ b/ckpem.h
@@ -95,6 +95,7 @@ struct pemTrustObjectStr {
typedef struct pemTrustObjectStr pemTrustObject;
typedef enum {
+ pemAll = -1, /* matches all types */
pemRaw,
pemCert,
pemBareKey,
diff --git a/pfind.c b/pfind.c
index fdcb945..30b1174 100644
--- a/pfind.c
+++ b/pfind.c
@@ -313,8 +313,9 @@ collect_objects(CK_ATTRIBUTE_PTR pTemplate,
plog("CKO_NETSCAPE_BUILTIN_ROOT_LIST\n");
goto done;
case CK_INVALID_HANDLE:
+ type = pemAll; /* look through all objectclasses - ignore the type field */
plog("CK_INVALID_HANDLE\n");
- goto done;
+ break;
default:
plog("no other object types %08x\n", objClass);
goto done; /* no other object types we understand in this module */
@@ -322,15 +323,20 @@ collect_objects(CK_ATTRIBUTE_PTR pTemplate,
/* find objects */
for (i = 0; i < pem_nobjs; i++) {
+ int match = 1; /* matches type if type not specified */
if (NULL == gobj[i])
continue;
plog(" %d type = %d\n", i, gobj[i]->type);
- if ((type == gobj[i]->type)
- && (slotID == gobj[i]->slotID)
- && (CK_TRUE ==
- pem_match(pTemplate, ulAttributeCount, gobj[i]))) {
-
+ if (type != pemAll) {
+ /* type specified - must match given type */
+ match = (type == gobj[i]->type);
+ }
+ if (match) {
+ match = (slotID == gobj[i]->slotID) &&
+ (CK_TRUE == pem_match(pTemplate, ulAttributeCount, gobj[i]));
+ }
+ if (match) {
pemInternalObject *o = gobj[i];
PUT_Object(o, *pError);
}