Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: chromeos/network/policy_applicator.cc

Issue 23526016: Autoconnect policy for CrOS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/network/policy_applicator.h" 5 #include "chromeos/network/policy_applicator.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 25 matching lines...) Expand all
36 const PolicyApplicator::GuidToPolicyMap& policies, 36 const PolicyApplicator::GuidToPolicyMap& policies,
37 const std::string& guid) { 37 const std::string& guid) {
38 PolicyApplicator::GuidToPolicyMap::const_iterator it = policies.find(guid); 38 PolicyApplicator::GuidToPolicyMap::const_iterator it = policies.find(guid);
39 if (it == policies.end()) 39 if (it == policies.end())
40 return NULL; 40 return NULL;
41 return it->second; 41 return it->second;
42 } 42 }
43 43
44 } // namespace 44 } // namespace
45 45
46 PolicyApplicator::PolicyApplicator(base::WeakPtr<ConfigurationHandler> handler, 46 PolicyApplicator::PolicyApplicator(
47 const NetworkProfile& profile, 47 base::WeakPtr<ConfigurationHandler> handler,
48 const GuidToPolicyMap& all_policies, 48 const NetworkProfile& profile,
49 std::set<std::string>* modified_policies) 49 const GuidToPolicyMap& all_policies,
50 const base::DictionaryValue& global_network_config,
51 std::set<std::string>* modified_policies)
50 : handler_(handler), profile_(profile) { 52 : handler_(handler), profile_(profile) {
53 global_network_config_.MergeDictionary(&global_network_config);
51 remaining_policies_.swap(*modified_policies); 54 remaining_policies_.swap(*modified_policies);
52 for (GuidToPolicyMap::const_iterator it = all_policies.begin(); 55 for (GuidToPolicyMap::const_iterator it = all_policies.begin();
53 it != all_policies.end(); ++it) { 56 it != all_policies.end(); ++it) {
54 all_policies_.insert(std::make_pair(it->first, it->second->DeepCopy())); 57 all_policies_.insert(std::make_pair(it->first, it->second->DeepCopy()));
55 } 58 }
56 } 59 }
57 60
58 void PolicyApplicator::Run() { 61 void PolicyApplicator::Run() {
59 DBusThreadManager::Get()->GetShillProfileClient()->GetProperties( 62 DBusThreadManager::Get()->GetShillProfileClient()->GetProperties(
60 dbus::ObjectPath(profile_.path), 63 dbus::ObjectPath(profile_.path),
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 } 187 }
185 } else if (was_managed) { 188 } else if (was_managed) {
186 VLOG(1) << "Removing configuration previously managed by policy " 189 VLOG(1) << "Removing configuration previously managed by policy "
187 << old_guid << ", because the policy was removed."; 190 << old_guid << ", because the policy was removed.";
188 191
189 // Remove the entry, because the network was managed but isn't anymore. 192 // Remove the entry, because the network was managed but isn't anymore.
190 // Note: An alternative might be to preserve the user settings, but it's 193 // Note: An alternative might be to preserve the user settings, but it's
191 // unclear which values originating the policy should be removed. 194 // unclear which values originating the policy should be removed.
192 DeleteEntry(entry); 195 DeleteEntry(entry);
193 } else { 196 } else {
194 VLOG(2) << "Ignore unmanaged entry."; 197 // The entry wasn't managed and doesn't match any current policy. Global
198 // network settings have to be applied.
195 199
196 // The entry wasn't managed and doesn't match any current policy. Thus 200 base::DictionaryValue shill_properties_to_update;
197 // leave it as it is. 201 GetPropertiesForUnmanagedEntry(entry_properties,
202 &shill_properties_to_update);
203 if (shill_properties_to_update.empty()) {
204 VLOG(2) << "Ignore unmanaged entry.";
205 } else {
206 VLOG(2) << "Apply global network config to unmanaged entry.";
207 handler_->UpdateExistingConfigurationWithPropertiesFromPolicy(
208 entry_properties, shill_properties_to_update);
209 }
198 } 210 }
199 } 211 }
200 212
201 void PolicyApplicator::DeleteEntry(const std::string& entry) { 213 void PolicyApplicator::DeleteEntry(const std::string& entry) {
202 DBusThreadManager::Get()->GetShillProfileClient()->DeleteEntry( 214 DBusThreadManager::Get()->GetShillProfileClient()->DeleteEntry(
203 dbus::ObjectPath(profile_.path), 215 dbus::ObjectPath(profile_.path),
204 entry, 216 entry,
205 base::Bind(&base::DoNothing), 217 base::Bind(&base::DoNothing),
206 base::Bind(&LogErrorMessage, FROM_HERE)); 218 base::Bind(&LogErrorMessage, FROM_HERE));
207 } 219 }
(...skipping 17 matching lines...) Expand all
225 if (auth == ::onc::ethernet::kNone) 237 if (auth == ::onc::ethernet::kNone)
226 return; 238 return;
227 } 239 }
228 240
229 scoped_ptr<base::DictionaryValue> shill_dictionary = 241 scoped_ptr<base::DictionaryValue> shill_dictionary =
230 policy_util::CreateShillConfiguration( 242 policy_util::CreateShillConfiguration(
231 profile_, guid, &policy, user_settings); 243 profile_, guid, &policy, user_settings);
232 handler_->CreateConfigurationFromPolicy(*shill_dictionary); 244 handler_->CreateConfigurationFromPolicy(*shill_dictionary);
233 } 245 }
234 246
247 void PolicyApplicator::GetPropertiesForUnmanagedEntry(
bartfab (slow) 2013/10/16 12:40:31 Could you comment this method a bit? It was not cl
pneubeck (no reviews) 2013/10/17 10:22:26 Done.
248 const base::DictionaryValue& entry_properties,
249 base::DictionaryValue* properties_to_update) const {
250 // kAllowAutoconnect is currently the only global config.
251
252 std::string type;
253 entry_properties.GetStringWithoutPathExpansion(shill::kTypeProperty, &type);
254 if (NetworkTypePattern::Ethernet().MatchesType(type))
255 return; // Autoconnect for Ethernet cannot be configured.
bartfab (slow) 2013/10/16 12:40:31 Nit: There should be two spaces before a trailing
pneubeck (no reviews) 2013/10/17 10:22:26 Done.
256
257 bool autoconnect_allowed = true;
258 global_network_config_.GetBooleanWithoutPathExpansion(
259 ::onc::global_network_config::kAllowAutoconnect, &autoconnect_allowed);
260 if (autoconnect_allowed)
261 return;
262
263 bool old_autoconnect = false;
264 entry_properties.GetBooleanWithoutPathExpansion(shill::kAutoConnectProperty,
pneubeck (no reviews) 2013/10/16 12:38:20 if entry doesn't exist, we have to set to false ex
pneubeck (no reviews) 2013/10/17 10:22:26 Done.
265 &old_autoconnect);
266 if (old_autoconnect) {
267 properties_to_update->SetBooleanWithoutPathExpansion(
268 shill::kAutoConnectProperty, false);
269 }
270 }
271
235 PolicyApplicator::~PolicyApplicator() { 272 PolicyApplicator::~PolicyApplicator() {
236 ApplyRemainingPolicies(); 273 ApplyRemainingPolicies();
237 STLDeleteValues(&all_policies_); 274 STLDeleteValues(&all_policies_);
238 } 275 }
239 276
240 void PolicyApplicator::ApplyRemainingPolicies() { 277 void PolicyApplicator::ApplyRemainingPolicies() {
241 if (!handler_) { 278 if (!handler_) {
242 LOG(WARNING) << "Handler destructed during policy application to profile " 279 LOG(WARNING) << "Handler destructed during policy application to profile "
243 << profile_.ToDebugString(); 280 << profile_.ToDebugString();
244 return; 281 return;
(...skipping 14 matching lines...) Expand all
259 296
260 VLOG(1) << "Creating new configuration managed by policy " << *it 297 VLOG(1) << "Creating new configuration managed by policy " << *it
261 << " in profile " << profile_.ToDebugString() << "."; 298 << " in profile " << profile_.ToDebugString() << ".";
262 299
263 CreateAndWriteNewShillConfiguration( 300 CreateAndWriteNewShillConfiguration(
264 *it, *policy, NULL /* no user settings */); 301 *it, *policy, NULL /* no user settings */);
265 } 302 }
266 } 303 }
267 304
268 } // namespace chromeos 305 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698