summaryrefslogtreecommitdiff
path: root/security/nss/lib/dev
diff options
context:
space:
mode:
authorwtc%netscape.com <devnull@localhost>2003-01-24 06:37:03 +0000
committerwtc%netscape.com <devnull@localhost>2003-01-24 06:37:03 +0000
commitd4652b8e1a85e2bb79ec4a3091c006595cebd1e7 (patch)
tree501256825977c64c176a46bf8e735ed443fb6522 /security/nss/lib/dev
parentefd34673aa9693615d1ea13716372bac30062feb (diff)
downloadnss-hg-d4652b8e1a85e2bb79ec4a3091c006595cebd1e7.tar.gz
Bug 190396.
Don't fail the search if the token returned an error that indicates that it legitimately couldn't find a CRL
Diffstat (limited to 'security/nss/lib/dev')
-rw-r--r--security/nss/lib/dev/devtoken.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/security/nss/lib/dev/devtoken.c b/security/nss/lib/dev/devtoken.c
index efc05d1fa..46624d362 100644
--- a/security/nss/lib/dev/devtoken.c
+++ b/security/nss/lib/dev/devtoken.c
@@ -393,7 +393,7 @@ find_objects
PRStatus *statusOpt
)
{
- CK_RV ckrv;
+ CK_RV ckrv = CKR_OK;
CK_ULONG count;
CK_OBJECT_HANDLE *objectHandles;
CK_OBJECT_HANDLE staticObjects[OBJECT_STACK_SIZE];
@@ -415,6 +415,7 @@ find_objects
objectHandles = nss_ZNEWARRAY(NULL, CK_OBJECT_HANDLE, arraySize);
}
if (!objectHandles) {
+ ckrv = CKR_HOST_MEMORY;
goto loser;
}
nssSession_EnterMonitor(session); /* ==== session lock === */
@@ -459,6 +460,7 @@ find_objects
}
if (!objectHandles) {
nssSession_ExitMonitor(session);
+ ckrv = CKR_HOST_MEMORY;
goto loser;
}
}
@@ -483,7 +485,23 @@ loser:
if (objectHandles && objectHandles != staticObjects) {
nss_ZFreeIf(objectHandles);
}
- if (statusOpt) *statusOpt = PR_FAILURE;
+ /*
+ * These errors should be treated the same as if the objects just weren't
+ * found..
+ */
+ if ((ckrv == CKR_ATTRIBUTE_TYPE_INVALID) ||
+ (ckrv == CKR_ATTRIBUTE_VALUE_INVALID) ||
+ (ckrv == CKR_DATA_INVALID) ||
+ (ckrv == CKR_DATA_LEN_RANGE) ||
+ (ckrv == CKR_FUNCTION_NOT_SUPPORTED) ||
+ (ckrv == CKR_TEMPLATE_INCOMPLETE) ||
+ (ckrv == CKR_TEMPLATE_INCONSISTENT)) {
+
+ nss_SetError(NSS_ERROR_NOT_FOUND);
+ if (statusOpt) *statusOpt = PR_SUCCESS;
+ } else {
+ if (statusOpt) *statusOpt = PR_FAILURE;
+ }
return (nssCryptokiObject **)NULL;
}