Index: chrome/browser/chromeos/cros/network_library_impl_base.cc |
diff --git a/chrome/browser/chromeos/cros/network_library_impl_base.cc b/chrome/browser/chromeos/cros/network_library_impl_base.cc |
index 89e5194b87f79d9a05fd0a09fcc83b0d4edfcd80..0339e5b2162ea4138ea1e531e7809c30941b2529 100644 |
--- a/chrome/browser/chromeos/cros/network_library_impl_base.cc |
+++ b/chrome/browser/chromeos/cros/network_library_impl_base.cc |
@@ -1077,9 +1077,18 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
from_policy); |
// Unknown fields are removed from the result. |
+ std::string validator_error; |
root_dict = validator.ValidateAndRepairObject( |
- &onc::kUnencryptedConfigurationSignature, |
- *root_dict); |
+ &onc::kToplevelConfigurationSignature, *root_dict, &validator_error); |
+ |
+ if (!validator_error.empty()) { |
+ if (error != NULL) { |
+ *error = validator_error; |
+ error->append("\n"); |
+ } |
+ LOG(WARNING) << "ONC from source " << source |
+ << " contains errors: " << validator_error; |
+ } |
if (root_dict.get() == NULL) { |
LOG(WARNING) << "ONC from source " << source |
@@ -1096,19 +1105,16 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
onc::kNetworkConfigurations, |
&network_configs); |
- // At least one of NetworkConfigurations or Certificates is required. |
- LOG_IF(WARNING, (!has_network_configurations && !has_certificates)) |
- << "ONC from source " << source |
- << " has neither NetworkConfigurations nor Certificates."; |
- |
if (has_certificates) { |
VLOG(2) << "ONC file has " << certificates->GetSize() << " certificates"; |
onc::CertificateImporter cert_importer(source, allow_web_trust_from_policy); |
std::string cert_error; |
if (!cert_importer.ParseAndStoreCertificates(*certificates, &cert_error)) { |
- if (error != NULL) |
- *error = cert_error; |
+ if (error != NULL) { |
+ error->append(cert_error); |
+ error->append("\n"); |
+ } |
LOG(WARNING) << "Cannot parse some of the certificates in the ONC from " |
<< "source " << source << " with error: " << cert_error; |
return false; |
@@ -1130,8 +1136,10 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
bool marked_for_removal = false; |
Network* network = parser.ParseNetwork(i, &marked_for_removal); |
if (!network) { |
- if (error != NULL) |
- *error = parser.parse_error(); |
+ if (error != NULL) { |
+ error->append(parser.parse_error()); |
+ error->append("\n"); |
+ } |
LOG(WARNING) << "Error during parsing network at index " << i |
<< " from ONC source " << source |
<< ": " << parser.parse_error(); |
@@ -1143,6 +1151,11 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
if (source == NetworkUIData::ONC_SOURCE_DEVICE_POLICY && |
network->type() != TYPE_WIFI && |
network->type() != TYPE_ETHERNET) { |
+ if (error != NULL) { |
+ error->append(l10n_util::GetStringUTF8( |
+ IDS_NETWORK_CONFIG_ERROR_IGNORING_DEVICE_LEVEL_POLICY)); |
+ error->append("\n"); |
+ } |
LOG(WARNING) << "Ignoring device-level policy-pushed network of type " |
<< network->type(); |
delete network; |
@@ -1205,6 +1218,11 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
if (ethernet) { |
CallConfigureService(ethernet->unique_id(), &dict); |
} else { |
+ if (error != NULL) { |
+ error->append(l10n_util::GetStringUTF8( |
+ IDS_NETWORK_CONFIG_ERROR_IGNORING_DEVICE_LEVEL_POLICY)); |
+ error->append("\n"); |
+ } |
DLOG(WARNING) << "Tried to import ONC with an Ethernet network when " |
<< "there is no active Ethernet connection."; |
} |