Index: nss/lib/pk11wrap/pk11cert.c |
diff --git a/nss/lib/pk11wrap/pk11cert.c b/nss/lib/pk11wrap/pk11cert.c |
index 3f3edb1194643f8345d3f67938b0193c9f3eeccf..1bf8a7f50bcb43396c470c7139b7facf28445c7d 100644 |
--- a/nss/lib/pk11wrap/pk11cert.c |
+++ b/nss/lib/pk11wrap/pk11cert.c |
@@ -293,13 +293,11 @@ PK11_MakeCertFromHandle(PK11SlotInfo *slot,CK_OBJECT_HANDLE certID, |
char * nickname = NULL; |
CERTCertificate *cert = NULL; |
CERTCertTrust *trust; |
- PRBool isFortezzaRootCA = PR_FALSE; |
- PRBool swapNickname = PR_FALSE; |
cert = pk11_fastCert(slot,certID,privateLabel, &nickname); |
if (cert == NULL) |
goto loser; |
- |
+ |
if (nickname) { |
if (cert->nickname != NULL) { |
cert->dbnickname = cert->nickname; |
@@ -307,7 +305,6 @@ PK11_MakeCertFromHandle(PK11SlotInfo *slot,CK_OBJECT_HANDLE certID, |
cert->nickname = PORT_ArenaStrdup(cert->arena,nickname); |
PORT_Free(nickname); |
nickname = NULL; |
- swapNickname = PR_TRUE; |
} |
/* remember where this cert came from.... If we have just looked |
@@ -343,7 +340,6 @@ PK11_MakeCertFromHandle(PK11SlotInfo *slot,CK_OBJECT_HANDLE certID, |
* full trust on explicitly */ |
if (PK11_DoesMechanism(slot,CKM_KEA_KEY_DERIVE)) { |
trust->objectSigningFlags |= CERTDB_VALID_CA; |
- isFortezzaRootCA = PR_TRUE; |
} |
} |
if ((type & NS_CERT_TYPE_SSL_CA) == NS_CERT_TYPE_SSL_CA) { |
@@ -982,12 +978,10 @@ PK11_ImportCert(PK11SlotInfo *slot, CERTCertificate *cert, |
*/ |
nssPKIObject_AddInstance(&c->object, certobj); |
/* nssTrustDomain_AddCertsToCache may release a reference to 'c' and |
- * replace 'c' by a different value. So we add a reference to 'c' to |
+ * replace 'c' with a different value. So we add a reference to 'c' to |
* prevent 'c' from being destroyed. */ |
nssCertificate_AddRef(c); |
nssTrustDomain_AddCertsToCache(STAN_GetDefaultTrustDomain(), &c, 1); |
- /* XXX should we pass the original value of 'c' to |
- * STAN_ForceCERTCertificateUpdate? */ |
(void)STAN_ForceCERTCertificateUpdate(c); |
nssCertificate_Destroy(c); |
SECITEM_FreeItem(keyID,PR_TRUE); |
@@ -2155,7 +2149,6 @@ PK11_FindCertFromDERCertItem(PK11SlotInfo *slot, const SECItem *inDerCert, |
{ |
NSSDER derCert; |
NSSToken *tok; |
- NSSTrustDomain *td = STAN_GetDefaultTrustDomain(); |
nssCryptokiObject *co = NULL; |
SECStatus rv; |
@@ -2689,3 +2682,25 @@ PK11_GetAllSlotsForCert(CERTCertificate *cert, void *arg) |
nssCryptokiObjectArray_Destroy(instances); |
return slotList; |
} |
+ |
+/* |
+ * Using __PK11_SetCertificateNickname is *DANGEROUS*. |
+ * |
+ * The API will update the NSS database, but it *will NOT* update the in-memory data. |
+ * As a result, after calling this API, there will be INCONSISTENCY between |
+ * in-memory data and the database. |
+ * |
+ * Use of the API should be limited to short-lived tools, which will exit immediately |
+ * after using this API. |
+ * |
+ * If you ignore this warning, your process is TAINTED and will most likely misbehave. |
+ */ |
+SECStatus |
+__PK11_SetCertificateNickname(CERTCertificate *cert, const char *nickname) |
+{ |
+ /* Can't set nickname of temp cert. */ |
+ if (!cert->slot || cert->pkcs11ID == CK_INVALID_HANDLE) { |
+ return SEC_ERROR_INVALID_ARGS; |
+ } |
+ return PK11_SetObjectNickname(cert->slot, cert->pkcs11ID, nickname); |
+} |