Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: net/third_party/mozilla_security_manager/nsNSSCertificateDB.cpp

Issue 18121007: *WIP* Store NSS slots per profile. Move keygen to chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more refactoring Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* ***** BEGIN LICENSE BLOCK ***** 1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3 * 3 *
4 * The contents of this file are subject to the Mozilla Public License Version 4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with 5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at 6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/ 7 * http://www.mozilla.org/MPL/
8 * 8 *
9 * Software distributed under the License is distributed on an "AS IS" basis, 9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
(...skipping 27 matching lines...) Expand all
38 38
39 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h" 39 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h"
40 40
41 #include <cert.h> 41 #include <cert.h>
42 #include <certdb.h> 42 #include <certdb.h>
43 #include <pk11pub.h> 43 #include <pk11pub.h>
44 #include <secerr.h> 44 #include <secerr.h>
45 45
46 #include "base/logging.h" 46 #include "base/logging.h"
47 #include "crypto/nss_util_internal.h" 47 #include "crypto/nss_util_internal.h"
48 #include "crypto/scoped_nss_types.h"
49 #include "net/base/net_errors.h" 48 #include "net/base/net_errors.h"
50 #include "net/cert/x509_certificate.h" 49 #include "net/cert/x509_certificate.h"
51 #include "net/cert/x509_util_nss.h" 50 #include "net/cert/x509_util_nss.h"
52 51
53 #if !defined(CERTDB_TERMINAL_RECORD) 52 #if !defined(CERTDB_TERMINAL_RECORD)
54 /* NSS 3.13 renames CERTDB_VALID_PEER to CERTDB_TERMINAL_RECORD 53 /* NSS 3.13 renames CERTDB_VALID_PEER to CERTDB_TERMINAL_RECORD
55 * and marks CERTDB_VALID_PEER as deprecated. 54 * and marks CERTDB_VALID_PEER as deprecated.
56 * If we're using an older version, rename it ourselves. 55 * If we're using an older version, rename it ourselves.
57 */ 56 */
58 #define CERTDB_TERMINAL_RECORD CERTDB_VALID_PEER 57 #define CERTDB_TERMINAL_RECORD CERTDB_VALID_PEER
59 #endif 58 #endif
60 59
61 namespace mozilla_security_manager { 60 namespace mozilla_security_manager {
62 61
63 // Based on nsNSSCertificateDB::handleCACertDownload, minus the UI bits. 62 // Based on nsNSSCertificateDB::handleCACertDownload, minus the UI bits.
64 bool ImportCACerts(const net::CertificateList& certificates, 63 bool ImportCACerts(crypto::ScopedPK11Slot slot,
64 const net::CertificateList& certificates,
65 net::X509Certificate* root, 65 net::X509Certificate* root,
66 net::NSSCertDatabase::TrustBits trustBits, 66 net::NSSCertDatabase::TrustBits trustBits,
67 net::NSSCertDatabase::ImportCertFailureList* not_imported) { 67 net::NSSCertDatabase::ImportCertFailureList* not_imported) {
68 if (certificates.empty() || !root) 68 if (certificates.empty() || !root || !slot.get())
69 return false; 69 return false;
70 70
71 crypto::ScopedPK11Slot slot(crypto::GetPublicNSSKeySlot());
72 if (!slot.get()) {
73 LOG(ERROR) << "Couldn't get internal key slot!";
74 return false;
75 }
76
77 // Mozilla had some code here to check if a perm version of the cert exists 71 // Mozilla had some code here to check if a perm version of the cert exists
78 // already and use that, but CERT_NewTempCertificate actually does that 72 // already and use that, but CERT_NewTempCertificate actually does that
79 // itself, so we skip it here. 73 // itself, so we skip it here.
80 74
81 if (!CERT_IsCACert(root->os_cert_handle(), NULL)) { 75 if (!CERT_IsCACert(root->os_cert_handle(), NULL)) {
82 not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( 76 not_imported->push_back(net::NSSCertDatabase::ImportCertFailure(
83 root, net::ERR_IMPORT_CA_CERT_NOT_CA)); 77 root, net::ERR_IMPORT_CA_CERT_NOT_CA));
84 } else if (root->os_cert_handle()->isperm) { 78 } else if (root->os_cert_handle()->isperm) {
85 // Mozilla just returns here, but we continue in case there are other certs 79 // Mozilla just returns here, but we continue in case there are other certs
86 // in the list which aren't already imported. 80 // in the list which aren't already imported.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 cert, net::ERR_IMPORT_CA_CERT_FAILED)); 163 cert, net::ERR_IMPORT_CA_CERT_FAILED));
170 } 164 }
171 } 165 }
172 166
173 // Any errors importing individual certs will be in listed in |not_imported|. 167 // Any errors importing individual certs will be in listed in |not_imported|.
174 return true; 168 return true;
175 } 169 }
176 170
177 // Based on nsNSSCertificateDB::ImportServerCertificate. 171 // Based on nsNSSCertificateDB::ImportServerCertificate.
178 bool ImportServerCert( 172 bool ImportServerCert(
173 crypto::ScopedPK11Slot slot,
179 const net::CertificateList& certificates, 174 const net::CertificateList& certificates,
180 net::NSSCertDatabase::TrustBits trustBits, 175 net::NSSCertDatabase::TrustBits trustBits,
181 net::NSSCertDatabase::ImportCertFailureList* not_imported) { 176 net::NSSCertDatabase::ImportCertFailureList* not_imported) {
182 if (certificates.empty()) 177 if (certificates.empty() || !slot.get())
183 return false; 178 return false;
184 179
185 crypto::ScopedPK11Slot slot(crypto::GetPublicNSSKeySlot());
186 if (!slot.get()) {
187 LOG(ERROR) << "Couldn't get internal key slot!";
188 return false;
189 }
190
191 for (size_t i = 0; i < certificates.size(); ++i) { 180 for (size_t i = 0; i < certificates.size(); ++i) {
192 const scoped_refptr<net::X509Certificate>& cert = certificates[i]; 181 const scoped_refptr<net::X509Certificate>& cert = certificates[i];
193 182
194 // Mozilla uses CERT_ImportCerts, which doesn't take a slot arg. We use 183 // Mozilla uses CERT_ImportCerts, which doesn't take a slot arg. We use
195 // PK11_ImportCert instead. 184 // PK11_ImportCert instead.
196 SECStatus srv = PK11_ImportCert( 185 SECStatus srv = PK11_ImportCert(
197 slot.get(), 186 slot.get(),
198 cert->os_cert_handle(), 187 cert->os_cert_handle(),
199 CK_INVALID_HANDLE, 188 CK_INVALID_HANDLE,
200 net::x509_util::GetUniqueNicknameForSlot( 189 net::x509_util::GetUniqueNicknameForSlot(
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 } else { 267 } else {
279 // ignore user and email/unknown certs 268 // ignore user and email/unknown certs
280 return true; 269 return true;
281 } 270 }
282 if (srv != SECSuccess) 271 if (srv != SECSuccess)
283 LOG(ERROR) << "SetCertTrust failed with error " << PORT_GetError(); 272 LOG(ERROR) << "SetCertTrust failed with error " << PORT_GetError();
284 return srv == SECSuccess; 273 return srv == SECSuccess;
285 } 274 }
286 275
287 } // namespace mozilla_security_manager 276 } // namespace mozilla_security_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698