Index: chromeos/network/onc/onc_certificate_importer_impl.cc |
diff --git a/chromeos/network/onc/onc_certificate_importer.cc b/chromeos/network/onc/onc_certificate_importer_impl.cc |
similarity index 86% |
rename from chromeos/network/onc/onc_certificate_importer.cc |
rename to chromeos/network/onc/onc_certificate_importer_impl.cc |
index 0ed9faf5c70bab667ee4f09ec7c130761b338f43..ca811eb057bbb98cb758ca439f2830b48b6f35b0 100644 |
--- a/chromeos/network/onc/onc_certificate_importer.cc |
+++ b/chromeos/network/onc/onc_certificate_importer_impl.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chromeos/network/onc/onc_certificate_importer.h" |
+#include "chromeos/network/onc/onc_certificate_importer_impl.h" |
#include <cert.h> |
#include <keyhi.h> |
@@ -27,15 +27,32 @@ |
namespace chromeos { |
namespace onc { |
-CertificateImporter::CertificateImporter(bool allow_trust_imports) |
- : allow_trust_imports_(allow_trust_imports) { |
+CertificateImporterImpl::CertificateImporterImpl() { |
} |
-CertificateImporter::ParseResult CertificateImporter::ParseAndStoreCertificates( |
+bool CertificateImporterImpl::ImportCertificates( |
+ const base::ListValue& certificates, |
+ onc::ONCSource source, |
+ net::CertificateList* onc_trusted_certificates) { |
+ VLOG(2) << "ONC file has " << certificates.GetSize() << " certificates"; |
+ |
+ // Web trust is only granted to certificates imported by the user. |
+ bool allow_trust_imports = source == onc::ONC_SOURCE_USER_IMPORT; |
+ if (!ParseAndStoreCertificates( |
+ allow_trust_imports, certificates, onc_trusted_certificates, NULL)) { |
+ LOG(ERROR) << "Cannot parse some of the certificates in the ONC from " |
+ << onc::GetSourceAsString(source); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+bool CertificateImporterImpl::ParseAndStoreCertificates( |
+ bool allow_trust_imports, |
const base::ListValue& certificates, |
net::CertificateList* onc_trusted_certificates, |
CertsByGUID* imported_server_and_ca_certs) { |
- size_t successful_imports = 0; |
+ bool success = true; |
for (size_t i = 0; i < certificates.GetSize(); ++i) { |
const base::DictionaryValue* certificate = NULL; |
certificates.GetDictionary(i, &certificate); |
@@ -43,27 +60,22 @@ CertificateImporter::ParseResult CertificateImporter::ParseAndStoreCertificates( |
VLOG(2) << "Parsing certificate at index " << i << ": " << *certificate; |
- if (!ParseAndStoreCertificate(*certificate, onc_trusted_certificates, |
+ if (!ParseAndStoreCertificate(allow_trust_imports, |
+ *certificate, |
+ onc_trusted_certificates, |
imported_server_and_ca_certs)) { |
+ success = false; |
ONC_LOG_ERROR( |
base::StringPrintf("Cannot parse certificate at index %zu", i)); |
} else { |
VLOG(2) << "Successfully imported certificate at index " << i; |
- ++successful_imports; |
} |
} |
- |
- if (successful_imports == certificates.GetSize()) { |
- return IMPORT_OK; |
- } else if (successful_imports == 0) { |
- return IMPORT_FAILED; |
- } else { |
- return IMPORT_INCOMPLETE; |
- } |
+ return success; |
} |
// static |
-void CertificateImporter::ListCertsWithNickname(const std::string& label, |
+void CertificateImporterImpl::ListCertsWithNickname(const std::string& label, |
net::CertificateList* result) { |
net::CertificateList all_certs; |
net::NSSCertDatabase::GetInstance()->ListCerts(&all_certs); |
@@ -101,7 +113,8 @@ void CertificateImporter::ListCertsWithNickname(const std::string& label, |
} |
// static |
-bool CertificateImporter::DeleteCertAndKeyByNickname(const std::string& label) { |
+bool CertificateImporterImpl::DeleteCertAndKeyByNickname( |
+ const std::string& label) { |
net::CertificateList cert_list; |
ListCertsWithNickname(label, &cert_list); |
bool result = true; |
@@ -120,7 +133,8 @@ bool CertificateImporter::DeleteCertAndKeyByNickname(const std::string& label) { |
return result; |
} |
-bool CertificateImporter::ParseAndStoreCertificate( |
+bool CertificateImporterImpl::ParseAndStoreCertificate( |
+ bool allow_trust_imports, |
const base::DictionaryValue& certificate, |
net::CertificateList* onc_trusted_certificates, |
CertsByGUID* imported_server_and_ca_certs) { |
@@ -144,7 +158,10 @@ bool CertificateImporter::ParseAndStoreCertificate( |
certificate.GetStringWithoutPathExpansion(certificate::kType, &cert_type); |
if (cert_type == certificate::kServer || |
cert_type == certificate::kAuthority) { |
- return ParseServerOrCaCertificate(cert_type, guid, certificate, |
+ return ParseServerOrCaCertificate(allow_trust_imports, |
+ cert_type, |
+ guid, |
+ certificate, |
onc_trusted_certificates, |
imported_server_and_ca_certs); |
} else if (cert_type == certificate::kClient) { |
@@ -155,7 +172,8 @@ bool CertificateImporter::ParseAndStoreCertificate( |
return false; |
} |
-bool CertificateImporter::ParseServerOrCaCertificate( |
+bool CertificateImporterImpl::ParseServerOrCaCertificate( |
+ bool allow_trust_imports, |
const std::string& cert_type, |
const std::string& guid, |
const base::DictionaryValue& certificate, |
@@ -186,7 +204,7 @@ bool CertificateImporter::ParseServerOrCaCertificate( |
bool import_with_ssl_trust = false; |
if (web_trust_flag) { |
- if (!allow_trust_imports_) |
+ if (!allow_trust_imports) |
ONC_LOG_WARNING("Web trust not granted for certificate: " + guid); |
else |
import_with_ssl_trust = true; |
@@ -270,7 +288,7 @@ bool CertificateImporter::ParseServerOrCaCertificate( |
return true; |
} |
-bool CertificateImporter::ParseClientCertificate( |
+bool CertificateImporterImpl::ParseClientCertificate( |
const std::string& guid, |
const base::DictionaryValue& certificate) { |
std::string pkcs12_data; |