| 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.";
|
| }
|
|
|