diff options
author | Rich Megginson <rmeggins@redhat.com> | 2009-12-17 14:52:44 -0700 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2010-04-12 16:50:56 -0400 |
commit | 36c0348e68e7aa8126b1e1f78c83de0979973c1b (patch) | |
tree | 14db86cdce1671e05cd7d7395f2671739757f1bd /pfind.c | |
parent | db8838516783d5b0bcdecaa08e770812c64af8ee (diff) | |
download | pemnss-36c0348e68e7aa8126b1e1f78c83de0979973c1b.tar.gz pemnss-36c0348e68e7aa8126b1e1f78c83de0979973c1b.tar.xz pemnss-36c0348e68e7aa8126b1e1f78c83de0979973c1b.zip |
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);
Diffstat (limited to 'pfind.c')
-rw-r--r-- | pfind.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -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); } |