diff options
author | relyea%netscape.com <devnull@localhost> | 2002-02-15 17:37:58 +0000 |
---|---|---|
committer | relyea%netscape.com <devnull@localhost> | 2002-02-15 17:37:58 +0000 |
commit | a164dd719fd6c54d5f4cfce6d0b50141342c1801 (patch) | |
tree | 32b3980159b67adfa8e58bb48dc072fcfa4ea4bc | |
parent | 3b0b7822a3e4f124ff6e39e0aa970cad1fd0ef71 (diff) | |
download | nss-hg-a164dd719fd6c54d5f4cfce6d0b50141342c1801.tar.gz |
Fix missing certs from the listing of all the certs in tokens with large cert caches (larger than 32).
-rw-r--r-- | security/nss/lib/dev/devobject.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/security/nss/lib/dev/devobject.c b/security/nss/lib/dev/devobject.c index 2c9369652..46c40120e 100644 --- a/security/nss/lib/dev/devobject.c +++ b/security/nss/lib/dev/devobject.c @@ -213,6 +213,7 @@ traverse_objects_by_template NSSArena *objectArena = NULL; nssSession *session; nssList *objectList = NULL; + int objectStackSize = OBJECT_STACK_SIZE; slot = tok->slot; objectStack = startOS; session = (sessionOpt) ? sessionOpt : tok->defaultSession; @@ -225,19 +226,25 @@ traverse_objects_by_template } while (PR_TRUE) { ckrv = CKAPI(slot)->C_FindObjects(hSession, objectStack, - OBJECT_STACK_SIZE, &count); + objectStackSize, &count); if (ckrv != CKR_OK) { nssSession_ExitMonitor(session); goto loser; } - if (count == OBJECT_STACK_SIZE) { + if (count == objectStackSize) { if (!objectList) { objectArena = NSSArena_Create(); objectList = nssList_Create(objectArena, PR_FALSE); } - objectStack = nss_ZNEWARRAY(objectArena, CK_OBJECT_HANDLE, - OBJECT_STACK_SIZE); nssList_Add(objectList, objectStack); + objectStackSize = objectStackSize * 2; + objectStack = nss_ZNEWARRAY(objectArena, CK_OBJECT_HANDLE, + objectStackSize); + if (objectStack == NULL) { + count =0; + break; + /* return what we can */ + } } else { break; } @@ -249,20 +256,22 @@ traverse_objects_by_template } if (objectList) { nssListIterator *objects; + CK_OBJECT_HANDLE *localStack; objects = nssList_CreateIterator(objectList); - for (objectStack = (CK_OBJECT_HANDLE *)nssListIterator_Start(objects); - objectStack != NULL; - objectStack = (CK_OBJECT_HANDLE *)nssListIterator_Next(objects)) { - for (i=0; i<count; i++) { - cbrv = (*callback)(tok, session, objectStack[i], arg); + objectStackSize = OBJECT_STACK_SIZE; + for (localStack = (CK_OBJECT_HANDLE *)nssListIterator_Start(objects); + localStack != NULL; + localStack = (CK_OBJECT_HANDLE *)nssListIterator_Next(objects)) { + for (i=0; i< objectStackSize; i++) { + cbrv = (*callback)(tok, session, localStack[i], arg); } + objectStackSize = objectStackSize * 2; } nssListIterator_Finish(objects); nssListIterator_Destroy(objects); - count = OBJECT_STACK_SIZE; } for (i=0; i<count; i++) { - cbrv = (*callback)(tok, session, startOS[i], arg); + cbrv = (*callback)(tok, session, objectStack[i], arg); } if (objectArena) NSSArena_Destroy(objectArena); |