static PRStatus add_subject_entry ( nssCertificateStore *store, NSSCertificate *cert ) { PRStatus nssrv; nssList *subjectList; subjectList = (nssList *)nssHash_Lookup(store->subject, &cert->subject); if (subjectList) { /* The subject is already in, add this cert to the list */ nssrv = nssList_AddUnique(subjectList, cert); } else { /* Create a new subject list for the subject */ subjectList = nssList_Create(NULL, PR_FALSE); if (!subjectList) { return PR_FAILURE; } nssList_SetSortFunction(subjectList, nssCertificate_SubjectListSort); /* Add the cert entry to this list of subjects */ nssrv = nssList_Add(subjectList, cert); if (nssrv != PR_SUCCESS) { return nssrv; } /* Add the subject list to the cache */ nssrv = nssHash_Add(store->subject, &cert->subject, subjectList); } return nssrv; }
NSS_IMPLEMENT PRStatus STAN_InitTokenForSlotInfo(NSSTrustDomain *td, PK11SlotInfo *slot) { NSSToken *token; if (!td) { td = g_default_trust_domain; } token = nssToken_CreateFromPK11SlotInfo(td, slot); PK11Slot_SetNSSToken(slot, token); /* Don't add non-existent token to TD's token list */ if (token) { NSSRWLock_LockWrite(td->tokensLock); nssList_Add(td->tokenList, token); NSSRWLock_UnlockWrite(td->tokensLock); } return PR_SUCCESS; }
NSS_IMPLEMENT PRStatus STAN_InitTokenForSlotInfo(NSSTrustDomain *td, PK11SlotInfo *slot) { NSSToken *token; if (!td) { td = g_default_trust_domain; if (!td) { /* we're called while still initting. slot will get added * appropriately through normal init processes */ return PR_SUCCESS; } } token = nssToken_CreateFromPK11SlotInfo(td, slot); PK11Slot_SetNSSToken(slot, token); /* Don't add nonexistent token to TD's token list */ if (token) { NSSRWLock_LockWrite(td->tokensLock); nssList_Add(td->tokenList, token); NSSRWLock_UnlockWrite(td->tokensLock); } return PR_SUCCESS; }
static void match_email(const void *k, void *v, void *a) { PRStatus nssrv; NSSCertificate *c; nssList *subjectList = (nssList *)v; struct email_template_str *et = (struct email_template_str *)a; nssrv = nssList_GetArray(subjectList, (void **)&c, 1); if (nssrv == PR_SUCCESS && nssUTF8_Equal(c->email, et->email, &nssrv)) { nssListIterator *iter = nssList_CreateIterator(subjectList); if (iter) { for (c = (NSSCertificate *)nssListIterator_Start(iter); c != (NSSCertificate *)NULL; c = (NSSCertificate *)nssListIterator_Next(iter)) { nssList_Add(et->emailList, c); } nssListIterator_Finish(iter); nssListIterator_Destroy(iter); } } }
static void cert_iter(const void *k, void *v, void *a) { nssList *certList = (nssList *)a; NSSCertificate *c = (NSSCertificate *)k; nssList_Add(certList, nssCertificate_AddRef(c)); }