Chromium Code Reviews| Index: chrome/browser/policy/configuration_policy_handler_chromeos.cc |
| diff --git a/chrome/browser/policy/configuration_policy_handler_chromeos.cc b/chrome/browser/policy/configuration_policy_handler_chromeos.cc |
| index d9edc6f439443d3e652c1ff08454baa6cde7692a..72493b06d74183f990694d78fac724c254c5c030 100644 |
| --- a/chrome/browser/policy/configuration_policy_handler_chromeos.cc |
| +++ b/chrome/browser/policy/configuration_policy_handler_chromeos.cc |
| @@ -4,12 +4,16 @@ |
| #include "chrome/browser/policy/configuration_policy_handler_chromeos.h" |
| +#include <algorithm> |
| #include <string> |
| +#include <vector> |
|
Joao da Silva
2012/08/09 09:24:52
Nit: <algorithm> and <vector> not used anymore
Mattias Nissler (ping if slow)
2012/08/09 11:32:42
Done.
|
| #include "base/json/json_reader.h" |
| #include "base/json/json_writer.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/string_util.h" |
| +#include "base/values.h" |
| +#include "chrome/browser/chromeos/cros/onc_constants.h" |
| #include "chrome/browser/chromeos/cros/onc_network_parser.h" |
| #include "chrome/browser/policy/policy_error_map.h" |
| #include "chrome/browser/policy/policy_map.h" |
| @@ -19,12 +23,14 @@ |
| #include "grit/generated_resources.h" |
| #include "policy/policy_constants.h" |
| +namespace onc = chromeos::onc; |
| + |
| namespace policy { |
| NetworkConfigurationPolicyHandler::NetworkConfigurationPolicyHandler( |
| const char* policy_name, |
| chromeos::NetworkUIData::ONCSource onc_source) |
| - : TypeCheckingPolicyHandler(policy_name, Value::TYPE_STRING), |
| + : TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_STRING), |
| onc_source_(onc_source) {} |
| NetworkConfigurationPolicyHandler::~NetworkConfigurationPolicyHandler() {} |
| @@ -32,7 +38,7 @@ NetworkConfigurationPolicyHandler::~NetworkConfigurationPolicyHandler() {} |
| bool NetworkConfigurationPolicyHandler::CheckPolicySettings( |
| const PolicyMap& policies, |
| PolicyErrorMap* errors) { |
| - const Value* value; |
| + const base::Value* value; |
| if (!CheckAndGetValue(policies, errors, &value)) |
| return false; |
| @@ -64,16 +70,16 @@ void NetworkConfigurationPolicyHandler::PrepareForDisplaying( |
| const PolicyMap::Entry* entry = policies->Get(policy_name()); |
| if (!entry) |
| return; |
| - Value* sanitized_config = SanitizeNetworkConfig(entry->value); |
| + base::Value* sanitized_config = SanitizeNetworkConfig(entry->value); |
| if (!sanitized_config) |
| - sanitized_config = Value::CreateNullValue(); |
| + sanitized_config = base::Value::CreateNullValue(); |
| policies->Set(policy_name(), entry->level, entry->scope, sanitized_config); |
| } |
| // static |
| -Value* NetworkConfigurationPolicyHandler::SanitizeNetworkConfig( |
| - const Value* config) { |
| +base::Value* NetworkConfigurationPolicyHandler::SanitizeNetworkConfig( |
| + const base::Value* config) { |
| std::string json_string; |
| if (!config->GetAsString(&json_string)) |
| return NULL; |
| @@ -94,7 +100,7 @@ Value* NetworkConfigurationPolicyHandler::SanitizeNetworkConfig( |
| ++network_entry) { |
| if ((*network_entry) && |
| (*network_entry)->IsType(base::Value::TYPE_DICTIONARY)) { |
| - StripSensitiveValues(static_cast<DictionaryValue*>(*network_entry)); |
| + MaskSensitiveValues(static_cast<DictionaryValue*>(*network_entry)); |
|
Joao da Silva
2012/08/09 09:24:52
Nit: base::
Mattias Nissler (ping if slow)
2012/08/09 11:32:42
Done.
|
| } |
| } |
| } |
| @@ -108,23 +114,36 @@ Value* NetworkConfigurationPolicyHandler::SanitizeNetworkConfig( |
| } |
| // static |
| -void NetworkConfigurationPolicyHandler::StripSensitiveValues( |
| +void NetworkConfigurationPolicyHandler::MaskSensitiveValues( |
| DictionaryValue* network_dict) { |
|
Joao da Silva
2012/08/09 09:24:52
Nit: base::
Mattias Nissler (ping if slow)
2012/08/09 11:32:42
Done.
|
| - // List of settings we filter from the network dictionary. |
| - static const char* kFilteredSettings[] = { |
| - "WiFi.Passphrase", |
| - "IPsec.EAP.Password", |
| - "IPsec.EAP.Password", |
| - "IPsec.XAUTH.Password", |
| - "L2TP.Password", |
| + // Paths of the properties to be replaced by the placeholder. Each entry |
| + // specifies dictionary key paths and must be terminated by a NULL element. |
| + static const int kMaxComponents = 4; |
| + static const char* kFilteredSettings[][kMaxComponents] = { |
| + { onc::kEthernet, onc::ethernet::kEAP, onc::eap::kPassword }, |
| + { onc::kVPN, onc::vpn::kIPsec, onc::vpn::kPSK }, |
| + { onc::kVPN, onc::vpn::kL2TP, onc::vpn::kPassword }, |
| + { onc::kVPN, onc::vpn::kOpenVPN, onc::vpn::kPassword }, |
| + { onc::kWiFi, onc::wifi::kEAP, onc::eap::kPassword }, |
| + { onc::kWiFi, onc::wifi::kPassphrase }, |
| }; |
| + |
| // Placeholder to insert in place of the filtered setting. |
| static const char kPlaceholder[] = "********"; |
| for (size_t i = 0; i < arraysize(kFilteredSettings); ++i) { |
| - if (network_dict->Remove(kFilteredSettings[i], NULL)) { |
| - network_dict->Set(kFilteredSettings[i], |
| - Value::CreateStringValue(kPlaceholder)); |
| + const char** path = kFilteredSettings[i]; |
| + base::DictionaryValue* dict = network_dict; |
| + int j = 0; |
| + for (j = 0; path[j + 1] != NULL; ++j) { |
| + if (!dict->GetDictionaryWithoutPathExpansion(path[j], &dict)) { |
| + dict = NULL; |
| + break; |
| + } |
| + } |
| + if (dict && dict->RemoveWithoutPathExpansion(path[j], NULL)) { |
| + dict->SetWithoutPathExpansion( |
| + path[j], base::Value::CreateStringValue(kPlaceholder)); |
| } |
| } |
| } |