From a7116d8ca22a5a7567cbf0032c55b18a91547fef Mon Sep 17 00:00:00 2001 From: "jpierre%netscape.com" Date: Fri, 10 May 2002 20:21:38 +0000 Subject: [PATCH] Fix for bug 142868 - CA certificates are imported with NULL nicknames . git-svn-id: svn://10.0.0.236/trunk@121276 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/security/nss/lib/certdb/certdb.c | 26 ++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/mozilla/security/nss/lib/certdb/certdb.c b/mozilla/security/nss/lib/certdb/certdb.c index fb8b2c409e0..42d4c36388c 100644 --- a/mozilla/security/nss/lib/certdb/certdb.c +++ b/mozilla/security/nss/lib/certdb/certdb.c @@ -34,7 +34,7 @@ /* * Certificate handling code * - * $Id: certdb.c,v 1.31 2002-05-02 18:59:55 ian.mcgreer%sun.com Exp $ + * $Id: certdb.c,v 1.32 2002-05-10 20:21:38 jpierre%netscape.com Exp $ */ #include "nssilock.h" @@ -2007,6 +2007,7 @@ CERT_SaveImportedCert(CERTCertificate *cert, SECCertUsage usage, loser: rv = SECFailure; done: + return(rv); } @@ -2039,20 +2040,37 @@ CERT_ImportCerts(CERTCertDBHandle *certdb, SECCertUsage usage, if ( keepCerts ) { for ( i = 0; i < fcerts; i++ ) { + char* canickname = NULL; + PRBool freeNickname = PR_FALSE; + SECKEY_UpdateCertPQG(certs[i]); + + if ( CERT_IsCACert(certs[i], NULL) ) { + canickname = CERT_MakeCANickname(certs[i]); + if ( canickname != NULL ) { + freeNickname = PR_TRUE; + } + } + if(CERT_IsCACert(certs[i], NULL) && (fcerts > 1)) { /* if we are importing only a single cert and specifying * a nickname, we want to use that nickname if it a CA, * otherwise if there are more than one cert, we don't - * know which cert it belongs to. + * know which cert it belongs to. But we still may try + * the individual canickname from the cert itself. */ - rv = CERT_AddTempCertToPerm(certs[i], NULL, NULL); + rv = CERT_AddTempCertToPerm(certs[i], canickname, NULL); } else { - rv = CERT_AddTempCertToPerm(certs[i], nickname, NULL); + rv = CERT_AddTempCertToPerm(certs[i], + nickname?nickname:canickname, NULL); } if (rv == SECSuccess) { CERT_SaveImportedCert(certs[i], usage, caOnly, NULL); } + + if (PR_TRUE == freeNickname) { + PORT_Free(canickname); + } /* don't care if it fails - keep going */ } }