diff options
author | wtc%netscape.com <devnull@localhost> | 2003-01-24 06:37:03 +0000 |
---|---|---|
committer | wtc%netscape.com <devnull@localhost> | 2003-01-24 06:37:03 +0000 |
commit | d4652b8e1a85e2bb79ec4a3091c006595cebd1e7 (patch) | |
tree | 501256825977c64c176a46bf8e735ed443fb6522 /security/nss/lib/dev | |
parent | efd34673aa9693615d1ea13716372bac30062feb (diff) | |
download | nss-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.c | 22 |
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; } |