summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorian.mcgreer%sun.com <devnull@localhost>2002-03-15 19:23:14 +0000
committerian.mcgreer%sun.com <devnull@localhost>2002-03-15 19:23:14 +0000
commit0d081ad2813f30fd03a0df7bdbe88754cdd1eef6 (patch)
treeb5e7d39a31afa78968845fc5596e2a1cefe9f4a8
parent25a4385539307e737544d95ea23a3d95e43b28de (diff)
downloadnss-hg-0d081ad2813f30fd03a0df7bdbe88754cdd1eef6.tar.gz
bug 130747, update trust after login to catch user certs when token doesn't return public key (ncipher)
-rw-r--r--security/nss/lib/pk11wrap/dev3hack.h5
-rw-r--r--security/nss/lib/pk11wrap/pk11slot.c1
-rw-r--r--security/nss/lib/pki/pki3hack.c19
3 files changed, 24 insertions, 1 deletions
diff --git a/security/nss/lib/pk11wrap/dev3hack.h b/security/nss/lib/pk11wrap/dev3hack.h
index a24eacd8f..19f9bbb8b 100644
--- a/security/nss/lib/pk11wrap/dev3hack.h
+++ b/security/nss/lib/pk11wrap/dev3hack.h
@@ -58,9 +58,12 @@ void PK11Slot_SetNSSToken(PK11SlotInfo *sl, NSSToken *nsst);
NSSToken * PK11Slot_GetNSSToken(PK11SlotInfo *sl);
-NSS_IMPLEMENT PRStatus
+NSS_EXTERN PRStatus
nssToken_LoadCerts(NSSToken *token);
+NSS_EXTERN void
+nssToken_UpdateTrustForCerts(NSSToken *token);
+
PR_END_EXTERN_C
#endif /* DEVNSS3HACK_H */
diff --git a/security/nss/lib/pk11wrap/pk11slot.c b/security/nss/lib/pk11wrap/pk11slot.c
index d207b9d7f..cd2d29bd4 100644
--- a/security/nss/lib/pk11wrap/pk11slot.c
+++ b/security/nss/lib/pk11wrap/pk11slot.c
@@ -1149,6 +1149,7 @@ PK11_DoPassword(PK11SlotInfo *slot, PRBool loadCerts, void *wincx)
if (rv == SECSuccess && slot->nssToken && !PK11_IsFriendly(slot)) {
/* notify stan about the login if certs are not public readable */
nssToken_LoadCerts(slot->nssToken);
+ nssToken_UpdateTrustForCerts(slot->nssToken);
}
} else if (!attempt) PORT_SetError(SEC_ERROR_BAD_PASSWORD);
return rv;
diff --git a/security/nss/lib/pki/pki3hack.c b/security/nss/lib/pki/pki3hack.c
index d26a68d2c..8a8d3bf63 100644
--- a/security/nss/lib/pki/pki3hack.c
+++ b/security/nss/lib/pki/pki3hack.c
@@ -282,6 +282,25 @@ nssToken_LoadCerts(NSSToken *token)
return nssrv;
}
+NSS_IMPLEMENT void
+nssToken_UpdateTrustForCerts(NSSToken *token)
+{
+ nssListIterator *certs;
+ NSSCertificate *cert;
+ certs = nssList_CreateIterator(token->certList);
+ for (cert = (NSSCertificate *)nssListIterator_Start(certs);
+ cert != (NSSCertificate *)NULL;
+ cert = (NSSCertificate *)nssListIterator_Next(certs))
+ {
+ CERTCertificate *cc = STAN_GetCERTCertificate(cert);
+ cc->trust = NULL;
+ /* force an update of the trust fields of the CERTCertificate */
+ (void)stan_GetCERTCertificate(cert, PR_FALSE);
+ }
+ nssListIterator_Finish(certs);
+ nssListIterator_Destroy(certs);
+}
+
NSS_IMPLEMENT PRBool
nssToken_SearchCerts
(