OLD | NEW |
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_util.h" | 5 #include "chromeos/network/policy_util.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/values.h" |
8 #include "chromeos/network/network_profile.h" | 9 #include "chromeos/network/network_profile.h" |
9 #include "chromeos/network/network_ui_data.h" | 10 #include "chromeos/network/network_ui_data.h" |
10 #include "chromeos/network/onc/onc_constants.h" | 11 #include "chromeos/network/onc/onc_constants.h" |
11 #include "chromeos/network/onc/onc_merger.h" | 12 #include "chromeos/network/onc/onc_merger.h" |
12 #include "chromeos/network/onc/onc_normalizer.h" | 13 #include "chromeos/network/onc/onc_normalizer.h" |
13 #include "chromeos/network/onc/onc_signature.h" | 14 #include "chromeos/network/onc/onc_signature.h" |
14 #include "chromeos/network/onc/onc_translator.h" | 15 #include "chromeos/network/onc/onc_translator.h" |
15 #include "chromeos/network/onc/onc_utils.h" | 16 #include "chromeos/network/onc/onc_utils.h" |
16 #include "chromeos/network/shill_property_util.h" | 17 #include "chromeos/network/shill_property_util.h" |
17 #include "third_party/cros_system_api/dbus/service_constants.h" | 18 #include "third_party/cros_system_api/dbus/service_constants.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 // Returns true if |policy| matches |actual_network|, which must be part of a | 73 // Returns true if |policy| matches |actual_network|, which must be part of a |
73 // ONC NetworkConfiguration. This should be the only such matching function | 74 // ONC NetworkConfiguration. This should be the only such matching function |
74 // within Chrome. Shill does such matching in several functions for network | 75 // within Chrome. Shill does such matching in several functions for network |
75 // identification. For compatibility, we currently should stick to Shill's | 76 // identification. For compatibility, we currently should stick to Shill's |
76 // matching behavior. | 77 // matching behavior. |
77 bool IsPolicyMatching(const base::DictionaryValue& policy, | 78 bool IsPolicyMatching(const base::DictionaryValue& policy, |
78 const base::DictionaryValue& actual_network) { | 79 const base::DictionaryValue& actual_network) { |
79 std::string policy_type; | 80 std::string policy_type; |
80 policy.GetStringWithoutPathExpansion(onc::network_config::kType, | 81 policy.GetStringWithoutPathExpansion(onc::network_config::kType, |
81 &policy_type); | 82 &policy_type); |
82 std::string network_type; | 83 std::string actual_network_type; |
83 actual_network.GetStringWithoutPathExpansion(onc::network_config::kType, | 84 actual_network.GetStringWithoutPathExpansion(onc::network_config::kType, |
84 &network_type); | 85 &actual_network_type); |
85 if (policy_type != network_type) | 86 if (policy_type != actual_network_type) |
86 return false; | 87 return false; |
87 | 88 |
88 if (network_type != onc::network_type::kWiFi) | 89 if (actual_network_type == onc::network_type::kEthernet) { |
89 return false; | 90 const base::DictionaryValue* policy_ethernet = NULL; |
| 91 policy.GetDictionaryWithoutPathExpansion(onc::network_config::kEthernet, |
| 92 &policy_ethernet); |
| 93 const base::DictionaryValue* actual_ethernet = NULL; |
| 94 actual_network.GetDictionaryWithoutPathExpansion( |
| 95 onc::network_config::kEthernet, &actual_ethernet); |
| 96 if (!policy_ethernet || !actual_ethernet) |
| 97 return false; |
90 | 98 |
91 const base::DictionaryValue* policy_wifi = NULL; | 99 std::string policy_auth; |
92 policy.GetDictionaryWithoutPathExpansion(onc::network_config::kWiFi, | 100 policy_ethernet->GetStringWithoutPathExpansion( |
93 &policy_wifi); | 101 onc::ethernet::kAuthentication, &policy_auth); |
94 const base::DictionaryValue* actual_wifi = NULL; | 102 std::string actual_auth; |
95 actual_network.GetDictionaryWithoutPathExpansion(onc::network_config::kWiFi, | 103 actual_ethernet->GetStringWithoutPathExpansion( |
96 &actual_wifi); | 104 onc::ethernet::kAuthentication, &actual_auth); |
97 if (!policy_wifi || !actual_wifi) | 105 return policy_auth == actual_auth; |
98 return false; | 106 } else if (actual_network_type == onc::network_type::kWiFi) { |
| 107 const base::DictionaryValue* policy_wifi = NULL; |
| 108 policy.GetDictionaryWithoutPathExpansion(onc::network_config::kWiFi, |
| 109 &policy_wifi); |
| 110 const base::DictionaryValue* actual_wifi = NULL; |
| 111 actual_network.GetDictionaryWithoutPathExpansion(onc::network_config::kWiFi, |
| 112 &actual_wifi); |
| 113 if (!policy_wifi || !actual_wifi) |
| 114 return false; |
99 | 115 |
100 std::string policy_ssid; | 116 std::string policy_ssid; |
101 policy_wifi->GetStringWithoutPathExpansion(onc::wifi::kSSID, &policy_ssid); | 117 policy_wifi->GetStringWithoutPathExpansion(onc::wifi::kSSID, &policy_ssid); |
102 std::string actual_ssid; | 118 std::string actual_ssid; |
103 actual_wifi->GetStringWithoutPathExpansion(onc::wifi::kSSID, &actual_ssid); | 119 actual_wifi->GetStringWithoutPathExpansion(onc::wifi::kSSID, &actual_ssid); |
104 return (policy_ssid == actual_ssid); | 120 return (policy_ssid == actual_ssid); |
| 121 } |
| 122 return false; |
105 } | 123 } |
106 | 124 |
107 } // namespace | 125 } // namespace |
108 | 126 |
109 scoped_ptr<base::DictionaryValue> CreateShillConfiguration( | 127 scoped_ptr<base::DictionaryValue> CreateShillConfiguration( |
110 const NetworkProfile& profile, | 128 const NetworkProfile& profile, |
111 const std::string& guid, | 129 const std::string& guid, |
112 const base::DictionaryValue* policy, | 130 const base::DictionaryValue* policy, |
113 const base::DictionaryValue* settings) { | 131 const base::DictionaryValue* settings) { |
114 scoped_ptr<base::DictionaryValue> effective; | 132 scoped_ptr<base::DictionaryValue> effective; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 it != policies.end(); ++it) { | 210 it != policies.end(); ++it) { |
193 if (IsPolicyMatching(*it->second, actual_network)) | 211 if (IsPolicyMatching(*it->second, actual_network)) |
194 return it->second; | 212 return it->second; |
195 } | 213 } |
196 return NULL; | 214 return NULL; |
197 } | 215 } |
198 | 216 |
199 } // namespace policy_util | 217 } // namespace policy_util |
200 | 218 |
201 } // namespace chromeos | 219 } // namespace chromeos |
OLD | NEW |