12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_normalizer.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_constants.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_signature.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace onc { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Normalizer::Normalizer(bool remove_recommended_fields) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : remove_recommended_fields_(remove_recommended_fields) { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Normalizer::~Normalizer() { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::DictionaryValue> Normalizer::NormalizeObject( 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const OncValueSignature* object_signature, 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& onc_object) { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(object_signature != NULL); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool error = false; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> result = 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MapObject(*object_signature, onc_object, &error); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!error); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result.Pass(); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::DictionaryValue> Normalizer::MapObject( 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const OncValueSignature& signature, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& onc_object, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* error) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> normalized = 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mapper::MapObject(signature, onc_object, error); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (normalized.get() == NULL) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<base::DictionaryValue>(); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (remove_recommended_fields_) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) normalized->RemoveWithoutPathExpansion(kRecommended, NULL); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (&signature == &kCertificateSignature) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeCertificate(normalized.get()); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kEAPSignature) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeEAP(normalized.get()); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kEthernetSignature) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeEthernet(normalized.get()); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kIPsecSignature) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeIPsec(normalized.get()); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kNetworkConfigurationSignature) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeNetworkConfiguration(normalized.get()); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kOpenVPNSignature) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeOpenVPN(normalized.get()); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kProxySettingsSignature) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeProxySettings(normalized.get()); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kVPNSignature) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeVPN(normalized.get()); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (&signature == &kWiFiSignature) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NormalizeWiFi(normalized.get()); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return normalized.Pass(); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RemoveEntryUnless(base::DictionaryValue* dict, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string path, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool condition) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!condition) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->RemoveWithoutPathExpansion(path, NULL); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeCertificate(base::DictionaryValue* cert) { 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using namespace certificate; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool remove = false; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cert->GetBooleanWithoutPathExpansion(kRemove, &remove); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(cert, certificate::kType, !remove); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string type; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cert->GetStringWithoutPathExpansion(certificate::kType, &type); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(cert, kPKCS12, type == kClient); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RemoveEntryUnless(cert, kTrustBits, type == kServer || type == kAuthority); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(cert, kX509, type == kServer || type == kAuthority); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeEthernet(base::DictionaryValue* ethernet) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using namespace ethernet; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string auth; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ethernet->GetStringWithoutPathExpansion(kAuthentication, &auth); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(ethernet, kEAP, auth == k8021X); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeEAP(base::DictionaryValue* eap) { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using namespace eap; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string clientcert_type; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eap->GetStringWithoutPathExpansion(kClientCertType, &clientcert_type); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(eap, kClientCertPattern, 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clientcert_type == certificate::kPattern); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(eap, kClientCertRef, clientcert_type == certificate::kRef); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string outer; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eap->GetStringWithoutPathExpansion(kOuter, &outer); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(eap, kAnonymousIdentity, 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) outer == kPEAP || outer == kEAP_TTLS); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(eap, kInner, 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) outer == kPEAP || outer == kEAP_TTLS || outer == kEAP_FAST); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeIPsec(base::DictionaryValue* ipsec) { 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch using namespace ipsec; 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string auth_type; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ipsec->GetStringWithoutPathExpansion(kAuthenticationType, &auth_type); 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RemoveEntryUnless(ipsec, vpn::kClientCertType, auth_type == kCert); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(ipsec, kServerCARef, auth_type == kCert); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(ipsec, kPSK, auth_type == kPSK); 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RemoveEntryUnless(ipsec, vpn::kSaveCredentials, auth_type == kPSK); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string clientcert_type; 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ipsec->GetStringWithoutPathExpansion(vpn::kClientCertType, &clientcert_type); 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RemoveEntryUnless(ipsec, vpn::kClientCertPattern, 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clientcert_type == certificate::kPattern); 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RemoveEntryUnless(ipsec, vpn::kClientCertRef, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clientcert_type == certificate::kRef); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int ike_version = -1; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ipsec->GetIntegerWithoutPathExpansion(kIKEVersion, &ike_version); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(ipsec, kEAP, ike_version == 2); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(ipsec, kGroup, ike_version == 1); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(ipsec, kXAUTH, ike_version == 1); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeNetworkConfiguration(base::DictionaryValue* network) { 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool remove = false; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->GetBooleanWithoutPathExpansion(kRemove, &remove); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (remove) { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->RemoveWithoutPathExpansion(network_config::kIPConfigs, NULL); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->RemoveWithoutPathExpansion(network_config::kName, NULL); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->RemoveWithoutPathExpansion(network_config::kNameServers, NULL); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->RemoveWithoutPathExpansion(network_config::kProxySettings, NULL); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->RemoveWithoutPathExpansion(network_config::kSearchDomains, NULL); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->RemoveWithoutPathExpansion(network_config::kType, NULL); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fields dependent on kType are removed afterwards, too. 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string type; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->GetStringWithoutPathExpansion(network_config::kType, &type); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(network, network_config::kEthernet, 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type == network_type::kEthernet); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(network, network_config::kVPN, type == network_type::kVPN); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(network, network_config::kWiFi, 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type == network_type::kWiFi); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeOpenVPN(base::DictionaryValue* openvpn) { 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using namespace vpn; 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string clientcert_type; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) openvpn->GetStringWithoutPathExpansion(kClientCertType, &clientcert_type); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(openvpn, kClientCertPattern, 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clientcert_type == certificate::kPattern); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(openvpn, kClientCertRef, 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clientcert_type == certificate::kRef); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeProxySettings(base::DictionaryValue* proxy) { 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using namespace proxy; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string type; 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy->GetStringWithoutPathExpansion(proxy::kType, &type); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(proxy, kManual, type == kManual); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(proxy, kExcludeDomains, type == kManual); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(proxy, kPAC, type == kPAC); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeVPN(base::DictionaryValue* vpn) { 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using namespace vpn; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string type; 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) vpn->GetStringWithoutPathExpansion(vpn::kType, &type); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(vpn, kOpenVPN, type == kOpenVPN); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(vpn, kIPsec, type == kIPsec || type == kTypeL2TP_IPsec); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(vpn, kL2TP, type == kTypeL2TP_IPsec); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeWiFi(base::DictionaryValue* wifi) { 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using namespace wifi; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string security; 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wifi->GetStringWithoutPathExpansion(wifi::kSecurity, &security); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(wifi, kEAP, security == kWEP_8021X || security == kWPA_EAP); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveEntryUnless(wifi, kPassphrase, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) security == kWEP_PSK || security == kWPA_PSK); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace onc 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 209