| Index: chromeos/network/policy_applicator.cc
|
| diff --git a/chromeos/network/policy_applicator.cc b/chromeos/network/policy_applicator.cc
|
| index 8b45c401caa04821ae910e6ad71bc34e60b85f5f..bd81d7db1fc2bca84c616a14d244e4f8570b5219 100644
|
| --- a/chromeos/network/policy_applicator.cc
|
| +++ b/chromeos/network/policy_applicator.cc
|
| @@ -172,8 +172,11 @@ void PolicyApplicator::GetEntryCallback(
|
| const base::DictionaryValue* user_settings =
|
| ui_data ? ui_data->user_settings() : NULL;
|
| scoped_ptr<base::DictionaryValue> new_shill_properties =
|
| - policy_util::CreateShillConfiguration(
|
| - profile_, new_guid, new_policy, user_settings);
|
| + policy_util::CreateShillConfiguration(profile_,
|
| + new_guid,
|
| + &global_network_config_,
|
| + new_policy,
|
| + user_settings);
|
| // A new policy has to be applied to this profile entry. In order to keep
|
| // implicit state of Shill like "connected successfully before", keep the
|
| // entry if a policy is reapplied (e.g. after reboot) or is updated.
|
| @@ -204,7 +207,8 @@ void PolicyApplicator::GetEntryCallback(
|
| // At first ENTRY1 and ENTRY2 should be removed, then the new config be
|
| // written and the result should be:
|
| // { {GUID=X, SSID=Y, USER_SETTINGS=X} }
|
| - WriteNewShillConfiguration(*new_shill_properties, *new_policy, true);
|
| + WriteNewShillConfiguration(
|
| + *new_shill_properties, *new_policy, true /* write later */);
|
| remaining_policies_.erase(new_guid);
|
| }
|
| } else if (was_managed) {
|
| @@ -219,8 +223,8 @@ void PolicyApplicator::GetEntryCallback(
|
| // The entry wasn't managed and doesn't match any current policy. Global
|
| // network settings have to be applied.
|
| base::DictionaryValue shill_properties_to_update;
|
| - GetPropertiesForUnmanagedEntry(entry_properties,
|
| - &shill_properties_to_update);
|
| + policy_util::SetShillPropertiesForGlobalPolicy(
|
| + entry_properties, global_network_config_, &shill_properties_to_update);
|
| if (shill_properties_to_update.empty()) {
|
| VLOG(2) << "Ignore unmanaged entry.";
|
| // Calling a SetProperties of Shill with an empty dictionary is a no op.
|
| @@ -266,37 +270,6 @@ void PolicyApplicator::WriteNewShillConfiguration(
|
| handler_->CreateConfigurationFromPolicy(shill_dictionary);
|
| }
|
|
|
| -void PolicyApplicator::GetPropertiesForUnmanagedEntry(
|
| - const base::DictionaryValue& entry_properties,
|
| - base::DictionaryValue* properties_to_update) const {
|
| - // kAllowOnlyPolicyNetworksToAutoconnect is currently the only global config.
|
| -
|
| - std::string type;
|
| - entry_properties.GetStringWithoutPathExpansion(shill::kTypeProperty, &type);
|
| - if (NetworkTypePattern::Ethernet().MatchesType(type))
|
| - return; // Autoconnect for Ethernet cannot be configured.
|
| -
|
| - // By default all networks are allowed to autoconnect.
|
| - bool only_policy_autoconnect = false;
|
| - global_network_config_.GetBooleanWithoutPathExpansion(
|
| - ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
|
| - &only_policy_autoconnect);
|
| - if (!only_policy_autoconnect)
|
| - return;
|
| -
|
| - bool old_autoconnect = false;
|
| - if (entry_properties.GetBooleanWithoutPathExpansion(
|
| - shill::kAutoConnectProperty, &old_autoconnect) &&
|
| - !old_autoconnect) {
|
| - // Autoconnect is already explictly disabled. No need to set it again.
|
| - return;
|
| - }
|
| - // If autconnect is not explicitly set yet, it might automatically be enabled
|
| - // by Shill. To prevent that, disable it explicitly.
|
| - properties_to_update->SetBooleanWithoutPathExpansion(
|
| - shill::kAutoConnectProperty, false);
|
| -}
|
| -
|
| PolicyApplicator::~PolicyApplicator() {
|
| ApplyRemainingPolicies();
|
| STLDeleteValues(&all_policies_);
|
| @@ -331,16 +304,20 @@ void PolicyApplicator::ApplyRemainingPolicies() {
|
| // remaining policies, new configurations have to be created.
|
| for (std::set<std::string>::iterator it = remaining_policies_.begin();
|
| it != remaining_policies_.end(); ++it) {
|
| - const base::DictionaryValue* policy = GetByGUID(all_policies_, *it);
|
| - DCHECK(policy);
|
| + const base::DictionaryValue* network_policy = GetByGUID(all_policies_, *it);
|
| + DCHECK(network_policy);
|
|
|
| VLOG(1) << "Creating new configuration managed by policy " << *it
|
| << " in profile " << profile_.ToDebugString() << ".";
|
|
|
| scoped_ptr<base::DictionaryValue> shill_dictionary =
|
| - policy_util::CreateShillConfiguration(
|
| - profile_, *it, policy, NULL /* no user settings */);
|
| - WriteNewShillConfiguration(*shill_dictionary, *policy, false);
|
| + policy_util::CreateShillConfiguration(profile_,
|
| + *it,
|
| + &global_network_config_,
|
| + network_policy,
|
| + NULL /* no user settings */);
|
| + WriteNewShillConfiguration(
|
| + *shill_dictionary, *network_policy, false /* write now */);
|
| }
|
| }
|
|
|
|
|