/* nsIEnumerator listModules (); */ NS_IMETHODIMP nsPKCS11ModuleDB::ListModules(nsIEnumerator **_retval) { nsNSSShutDownPreventionLock locker; nsresult rv = NS_OK; /* get isupports array */ nsCOMPtr<nsISupportsArray> array; rv = NS_NewISupportsArray(getter_AddRefs(array)); if (NS_FAILED(rv)) return rv; /* get the default list of modules */ SECMODModuleList *list = SECMOD_GetDefaultModuleList(); /* lock down the list for reading */ SECMODListLock *lock = SECMOD_GetDefaultModuleListLock(); SECMOD_GetReadLock(lock); while (list) { nsCOMPtr<nsIPKCS11Module> module = new nsPKCS11Module(list->module); array->AppendElement(module); list = list->next; } /* Get the modules in the database that didn't load */ list = SECMOD_GetDeadModuleList(); while (list) { nsCOMPtr<nsIPKCS11Module> module = new nsPKCS11Module(list->module); array->AppendElement(module); list = list->next; } SECMOD_ReleaseReadLock(lock); rv = array->Enumerate(_retval); return rv; }
/************************************************************************ * * L i s t M o d u l e s * * Lists all the modules in the database, along with their slots and tokens. */ Error ListModules() { SECMODListLock *lock; SECMODModuleList *list; SECMODModuleList *deadlist; SECMODModuleList *mlp; Error ret=UNSPECIFIED_ERR; int count = 0; lock = SECMOD_GetDefaultModuleListLock(); if(!lock) { PR_fprintf(PR_STDERR, errStrings[NO_LIST_LOCK_ERR]); return NO_LIST_LOCK_ERR; } SECMOD_GetReadLock(lock); list = SECMOD_GetDefaultModuleList(); deadlist = SECMOD_GetDeadModuleList(); if (!list && !deadlist) { PR_fprintf(PR_STDERR, errStrings[NO_MODULE_LIST_ERR]); ret = NO_MODULE_LIST_ERR; goto loser; } PR_fprintf(PR_STDOUT, "\nListing of PKCS #11 Modules\n" "-----------------------------------------------------------\n"); for(mlp=list; mlp != NULL; mlp = mlp->next) { printModule(mlp->module, &count); } for (mlp=deadlist; mlp != NULL; mlp = mlp->next) { printModule(mlp->module, &count); } PR_fprintf(PR_STDOUT, "-----------------------------------------------------------\n"); ret = SUCCESS; loser: SECMOD_ReleaseReadLock(lock); return ret; }