onc_signature.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Use of this source code is governed by a BSD-style license that can be 3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// found in the LICENSE file. 4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include "chromeos/network/onc/onc_signature.h" 6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include "components/onc/onc_constants.h" 8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include "third_party/cros_system_api/dbus/service_constants.h" 9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangusing base::Value; 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangnamespace chromeos { 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangnamespace onc { 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangnamespace { 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncValueSignature kBoolSignature = { 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Value::TYPE_BOOLEAN, NULL 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncValueSignature kStringSignature = { 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Value::TYPE_STRING, NULL 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncValueSignature kIntegerSignature = { 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Value::TYPE_INTEGER, NULL 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncValueSignature kStringListSignature = { 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Value::TYPE_LIST, NULL, &kStringSignature 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncValueSignature kIntegerListSignature = { 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Value::TYPE_LIST, NULL, &kIntegerSignature 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncValueSignature kIPConfigListSignature = { 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Value::TYPE_LIST, NULL, &kIPConfigSignature 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncValueSignature kCellularApnListSignature = { 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Value::TYPE_LIST, NULL, &kCellularApnSignature 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncFieldSignature issuer_subject_pattern_fields[] = { 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kCommonName, &kStringSignature}, 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kLocality, &kStringSignature}, 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kOrganization, &kStringSignature}, 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kOrganizationalUnit, &kStringSignature}, 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang {NULL}}; 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncFieldSignature certificate_pattern_fields[] = { 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::kRecommended, &kRecommendedSignature}, 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kEnrollmentURI, &kStringListSignature}, 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kIssuer, &kIssuerSubjectPatternSignature}, 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kIssuerCARef, &kStringListSignature}, 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kIssuerCAPEMs, &kStringListSignature}, 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::certificate::kSubject, &kIssuerSubjectPatternSignature}, 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang {NULL}}; 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncFieldSignature eap_fields[] = { 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::kRecommended, &kRecommendedSignature}, 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kAnonymousIdentity, &kStringSignature}, 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kClientCertPattern, &kCertificatePatternSignature}, 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kClientCertRef, &kStringSignature}, 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kClientCertType, &kStringSignature}, 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kIdentity, &kStringSignature}, 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kInner, &kStringSignature}, 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kOuter, &kStringSignature}, 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kPassword, &kStringSignature}, 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kSaveCredentials, &kBoolSignature}, 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kServerCAPEMs, &kStringListSignature}, 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kServerCARef, &kStringSignature}, 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::eap::kUseSystemCAs, &kBoolSignature}, 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang {NULL}}; 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncFieldSignature ipsec_fields[] = { 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::kRecommended, &kRecommendedSignature}, 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::ipsec::kAuthenticationType, &kStringSignature}, 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::vpn::kClientCertPattern, &kCertificatePatternSignature}, 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::vpn::kClientCertRef, &kStringSignature}, 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::vpn::kClientCertType, &kStringSignature}, 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::ipsec::kGroup, &kStringSignature}, 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::ipsec::kIKEVersion, &kIntegerSignature}, 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::ipsec::kPSK, &kStringSignature}, 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::vpn::kSaveCredentials, &kBoolSignature}, 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::ipsec::kServerCAPEMs, &kStringSignature}, 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::ipsec::kServerCARef, &kStringSignature}, 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Not yet supported. 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // { ipsec::kEAP, &kEAPSignature }, 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // { ipsec::kXAUTH, &kXAUTHSignature }, 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang {NULL}}; 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncFieldSignature l2tp_fields[] = { 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::kRecommended, &kRecommendedSignature}, 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::vpn::kPassword, &kStringSignature}, 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::vpn::kSaveCredentials, &kBoolSignature}, 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::vpn::kUsername, &kStringSignature}, 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang {NULL}}; 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangconst OncFieldSignature openvpn_fields[] = { 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::kRecommended, &kRecommendedSignature}, 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::openvpn::kAuth, &kStringSignature}, 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::openvpn::kAuthNoCache, &kBoolSignature}, 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::openvpn::kAuthRetry, &kStringSignature}, 99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { ::onc::openvpn::kCipher, &kStringSignature}, 100 { ::onc::vpn::kClientCertPattern, &kCertificatePatternSignature}, 101 { ::onc::vpn::kClientCertRef, &kStringSignature}, 102 { ::onc::vpn::kClientCertType, &kStringSignature}, 103 { ::onc::openvpn::kCompLZO, &kStringSignature}, 104 { ::onc::openvpn::kCompNoAdapt, &kBoolSignature}, 105 { ::onc::openvpn::kKeyDirection, &kStringSignature}, 106 { ::onc::openvpn::kNsCertType, &kStringSignature}, 107 { ::onc::vpn::kPassword, &kStringSignature}, 108 { ::onc::openvpn::kPort, &kIntegerSignature}, 109 { ::onc::openvpn::kProto, &kStringSignature}, 110 { ::onc::openvpn::kPushPeerInfo, &kBoolSignature}, 111 { ::onc::openvpn::kRemoteCertEKU, &kStringSignature}, 112 { ::onc::openvpn::kRemoteCertKU, &kStringListSignature}, 113 { ::onc::openvpn::kRemoteCertTLS, &kStringSignature}, 114 { ::onc::openvpn::kRenegSec, &kIntegerSignature}, 115 { ::onc::vpn::kSaveCredentials, &kBoolSignature}, 116 { ::onc::openvpn::kServerCAPEMs, &kStringListSignature}, 117 { ::onc::openvpn::kServerCARef, &kStringSignature}, 118 // Not supported, yet. 119 { ::onc::openvpn::kServerCertPEM, &kStringSignature}, 120 { ::onc::openvpn::kServerCertRef, &kStringSignature}, 121 { ::onc::openvpn::kServerPollTimeout, &kIntegerSignature}, 122 { ::onc::openvpn::kShaper, &kIntegerSignature}, 123 { ::onc::openvpn::kStaticChallenge, &kStringSignature}, 124 { ::onc::openvpn::kTLSAuthContents, &kStringSignature}, 125 { ::onc::openvpn::kTLSRemote, &kStringSignature}, 126 { ::onc::vpn::kUsername, &kStringSignature}, 127 // Not supported, yet. 128 { ::onc::openvpn::kVerb, &kStringSignature}, 129 {NULL}}; 130 131const OncFieldSignature vpn_fields[] = { 132 { ::onc::kRecommended, &kRecommendedSignature}, 133 { ::onc::vpn::kAutoConnect, &kBoolSignature}, 134 { ::onc::vpn::kHost, &kStringSignature}, 135 { ::onc::vpn::kIPsec, &kIPsecSignature}, 136 { ::onc::vpn::kL2TP, &kL2TPSignature}, 137 { ::onc::vpn::kOpenVPN, &kOpenVPNSignature}, 138 { ::onc::vpn::kType, &kStringSignature}, 139 {NULL}}; 140 141const OncFieldSignature ethernet_fields[] = { 142 { ::onc::kRecommended, &kRecommendedSignature}, 143 { ::onc::ethernet::kAuthentication, &kStringSignature}, 144 { ::onc::ethernet::kEAP, &kEAPSignature}, 145 {NULL}}; 146 147// Not supported, yet. 148const OncFieldSignature ipconfig_fields[] = { 149 { ::onc::ipconfig::kGateway, &kStringSignature}, 150 { ::onc::ipconfig::kIPAddress, &kStringSignature}, 151 { ::onc::network_config::kNameServers, &kStringSignature}, 152 { ::onc::ipconfig::kRoutingPrefix, &kIntegerSignature}, 153 { ::onc::network_config::kSearchDomains, &kStringListSignature}, 154 { ::onc::ipconfig::kType, &kStringSignature}, 155 {NULL}}; 156 157const OncFieldSignature proxy_location_fields[] = { 158 { ::onc::proxy::kHost, &kStringSignature}, 159 { ::onc::proxy::kPort, &kIntegerSignature}, {NULL}}; 160 161const OncFieldSignature proxy_manual_fields[] = { 162 { ::onc::proxy::kFtp, &kProxyLocationSignature}, 163 { ::onc::proxy::kHttp, &kProxyLocationSignature}, 164 { ::onc::proxy::kHttps, &kProxyLocationSignature}, 165 { ::onc::proxy::kSocks, &kProxyLocationSignature}, 166 {NULL}}; 167 168const OncFieldSignature proxy_settings_fields[] = { 169 { ::onc::kRecommended, &kRecommendedSignature}, 170 { ::onc::proxy::kExcludeDomains, &kStringListSignature}, 171 { ::onc::proxy::kManual, &kProxyManualSignature}, 172 { ::onc::proxy::kPAC, &kStringSignature}, 173 { ::onc::proxy::kType, &kStringSignature}, 174 {NULL}}; 175 176const OncFieldSignature wifi_fields[] = { 177 { ::onc::kRecommended, &kRecommendedSignature}, 178 { ::onc::wifi::kAutoConnect, &kBoolSignature}, 179 { ::onc::wifi::kEAP, &kEAPSignature}, 180 { ::onc::wifi::kHiddenSSID, &kBoolSignature}, 181 { ::onc::wifi::kPassphrase, &kStringSignature}, 182 { ::onc::wifi::kSSID, &kStringSignature}, 183 { ::onc::wifi::kSecurity, &kStringSignature}, 184 {NULL}}; 185 186const OncFieldSignature wifi_with_state_fields[] = { 187 { ::onc::wifi::kBSSID, &kStringSignature}, 188 { ::onc::wifi::kFrequency, &kIntegerSignature}, 189 { ::onc::wifi::kFrequencyList, &kIntegerListSignature}, 190 { ::onc::wifi::kSignalStrength, &kIntegerSignature}, 191 {NULL}}; 192 193const OncFieldSignature cellular_provider_fields[] = { 194 { ::onc::cellular_provider::kCode, &kStringSignature}, 195 { ::onc::cellular_provider::kCountry, &kStringSignature}, 196 { ::onc::cellular_provider::kName, &kStringSignature}, 197 {NULL}}; 198 199const OncFieldSignature cellular_apn_fields[] = { 200 { ::onc::cellular_apn::kName, &kStringSignature}, 201 { ::onc::cellular_apn::kUsername, &kStringSignature}, 202 { ::onc::cellular_apn::kPassword, &kStringSignature}, 203 {NULL}}; 204 205const OncFieldSignature cellular_fields[] = { 206 { ::onc::kRecommended, &kRecommendedSignature}, 207 { ::onc::cellular::kAPN, &kCellularApnSignature }, 208 { ::onc::cellular::kAPNList, &kCellularApnListSignature}, {NULL}}; 209 210const OncFieldSignature cellular_with_state_fields[] = { 211 { ::onc::cellular::kActivateOverNonCellularNetwork, &kBoolSignature}, 212 { ::onc::cellular::kActivationState, &kStringSignature}, 213 { ::onc::cellular::kAllowRoaming, &kStringSignature}, 214 { ::onc::cellular::kCarrier, &kStringSignature}, 215 { ::onc::cellular::kESN, &kStringSignature}, 216 { ::onc::cellular::kFamily, &kStringSignature}, 217 { ::onc::cellular::kFirmwareRevision, &kStringSignature}, 218 { ::onc::cellular::kFoundNetworks, &kStringSignature}, 219 { ::onc::cellular::kHardwareRevision, &kStringSignature}, 220 { ::onc::cellular::kHomeProvider, &kCellularProviderSignature}, 221 { ::onc::cellular::kICCID, &kStringSignature}, 222 { ::onc::cellular::kIMEI, &kStringSignature}, 223 { ::onc::cellular::kIMSI, &kStringSignature}, 224 { ::onc::cellular::kManufacturer, &kStringSignature}, 225 { ::onc::cellular::kMDN, &kStringSignature}, 226 { ::onc::cellular::kMEID, &kStringSignature}, 227 { ::onc::cellular::kMIN, &kStringSignature}, 228 { ::onc::cellular::kModelID, &kStringSignature}, 229 { ::onc::cellular::kNetworkTechnology, &kStringSignature}, 230 { ::onc::cellular::kPRLVersion, &kStringSignature}, 231 { ::onc::cellular::kProviderRequiresRoaming, &kStringSignature}, 232 { ::onc::cellular::kRoamingState, &kStringSignature}, 233 { ::onc::cellular::kSelectedNetwork, &kStringSignature}, 234 { ::onc::cellular::kServingOperator, &kCellularProviderSignature}, 235 { ::onc::cellular::kSIMLockStatus, &kStringSignature}, 236 { ::onc::cellular::kSIMPresent, &kStringSignature}, 237 { ::onc::cellular::kSupportedCarriers, &kStringSignature}, 238 { ::onc::cellular::kSupportNetworkScan, &kStringSignature}, 239 {NULL}}; 240 241const OncFieldSignature network_configuration_fields[] = { 242 { ::onc::kRecommended, &kRecommendedSignature}, 243 { ::onc::network_config::kEthernet, &kEthernetSignature}, 244 { ::onc::network_config::kGUID, &kStringSignature}, 245 // Not supported, yet. 246 { ::onc::network_config::kIPConfigs, &kIPConfigListSignature}, 247 { ::onc::network_config::kName, &kStringSignature}, 248 // Not supported, yet. 249 { ::onc::network_config::kNameServers, &kStringListSignature}, 250 { ::onc::network_config::kProxySettings, &kProxySettingsSignature}, 251 { ::onc::kRemove, &kBoolSignature}, 252 // Not supported, yet. 253 { ::onc::network_config::kSearchDomains, &kStringListSignature}, 254 { ::onc::network_config::kType, &kStringSignature}, 255 { ::onc::network_config::kVPN, &kVPNSignature}, 256 { ::onc::network_config::kWiFi, &kWiFiSignature}, 257 { ::onc::network_config::kCellular, &kCellularSignature}, 258 {NULL}}; 259 260const OncFieldSignature network_with_state_fields[] = { 261 { ::onc::network_config::kCellular, &kCellularWithStateSignature}, 262 { ::onc::network_config::kConnectionState, &kStringSignature}, 263 { ::onc::network_config::kWiFi, &kWiFiWithStateSignature}, 264 {NULL}}; 265 266const OncFieldSignature certificate_fields[] = { 267 { ::onc::certificate::kGUID, &kStringSignature}, 268 { ::onc::certificate::kPKCS12, &kStringSignature}, 269 { ::onc::kRemove, &kBoolSignature}, 270 { ::onc::certificate::kTrustBits, &kStringListSignature}, 271 { ::onc::certificate::kType, &kStringSignature}, 272 { ::onc::certificate::kX509, &kStringSignature}, 273 {NULL}}; 274 275const OncFieldSignature toplevel_configuration_fields[] = { 276 { ::onc::toplevel_config::kCertificates, &kCertificateListSignature}, 277 { ::onc::toplevel_config::kNetworkConfigurations, 278 &kNetworkConfigurationListSignature}, 279 { ::onc::toplevel_config::kType, &kStringSignature}, 280 { ::onc::encrypted::kCipher, &kStringSignature}, 281 { ::onc::encrypted::kCiphertext, &kStringSignature}, 282 { ::onc::encrypted::kHMAC, &kStringSignature}, 283 { ::onc::encrypted::kHMACMethod, &kStringSignature}, 284 { ::onc::encrypted::kIV, &kStringSignature}, 285 { ::onc::encrypted::kIterations, &kIntegerSignature}, 286 { ::onc::encrypted::kSalt, &kStringSignature}, 287 { ::onc::encrypted::kStretch, &kStringSignature}, {NULL}}; 288 289} // namespace 290 291const OncValueSignature kRecommendedSignature = { 292 Value::TYPE_LIST, NULL, &kStringSignature 293}; 294const OncValueSignature kEAPSignature = { 295 Value::TYPE_DICTIONARY, eap_fields, NULL 296}; 297const OncValueSignature kIssuerSubjectPatternSignature = { 298 Value::TYPE_DICTIONARY, issuer_subject_pattern_fields, NULL 299}; 300const OncValueSignature kCertificatePatternSignature = { 301 Value::TYPE_DICTIONARY, certificate_pattern_fields, NULL 302}; 303const OncValueSignature kIPsecSignature = { 304 Value::TYPE_DICTIONARY, ipsec_fields, NULL 305}; 306const OncValueSignature kL2TPSignature = { 307 Value::TYPE_DICTIONARY, l2tp_fields, NULL 308}; 309const OncValueSignature kOpenVPNSignature = { 310 Value::TYPE_DICTIONARY, openvpn_fields, NULL 311}; 312const OncValueSignature kVPNSignature = { 313 Value::TYPE_DICTIONARY, vpn_fields, NULL 314}; 315const OncValueSignature kEthernetSignature = { 316 Value::TYPE_DICTIONARY, ethernet_fields, NULL 317}; 318const OncValueSignature kIPConfigSignature = { 319 Value::TYPE_DICTIONARY, ipconfig_fields, NULL 320}; 321const OncValueSignature kProxyLocationSignature = { 322 Value::TYPE_DICTIONARY, proxy_location_fields, NULL 323}; 324const OncValueSignature kProxyManualSignature = { 325 Value::TYPE_DICTIONARY, proxy_manual_fields, NULL 326}; 327const OncValueSignature kProxySettingsSignature = { 328 Value::TYPE_DICTIONARY, proxy_settings_fields, NULL 329}; 330const OncValueSignature kWiFiSignature = { 331 Value::TYPE_DICTIONARY, wifi_fields, NULL 332}; 333const OncValueSignature kCertificateSignature = { 334 Value::TYPE_DICTIONARY, certificate_fields, NULL 335}; 336const OncValueSignature kNetworkConfigurationSignature = { 337 Value::TYPE_DICTIONARY, network_configuration_fields, NULL 338}; 339const OncValueSignature kCertificateListSignature = { 340 Value::TYPE_LIST, NULL, &kCertificateSignature 341}; 342const OncValueSignature kNetworkConfigurationListSignature = { 343 Value::TYPE_LIST, NULL, &kNetworkConfigurationSignature 344}; 345const OncValueSignature kToplevelConfigurationSignature = { 346 Value::TYPE_DICTIONARY, toplevel_configuration_fields, NULL 347}; 348 349// Derived "ONC with State" signatures. 350const OncValueSignature kNetworkWithStateSignature = { 351 Value::TYPE_DICTIONARY, network_with_state_fields, NULL, 352 &kNetworkConfigurationSignature 353}; 354const OncValueSignature kWiFiWithStateSignature = { 355 Value::TYPE_DICTIONARY, wifi_with_state_fields, NULL, &kWiFiSignature 356}; 357const OncValueSignature kCellularSignature = { 358 Value::TYPE_DICTIONARY, cellular_fields, NULL 359}; 360const OncValueSignature kCellularWithStateSignature = { 361 Value::TYPE_DICTIONARY, cellular_with_state_fields, NULL, &kCellularSignature 362}; 363const OncValueSignature kCellularProviderSignature = { 364 Value::TYPE_DICTIONARY, cellular_provider_fields, NULL 365}; 366const OncValueSignature kCellularApnSignature = { 367 Value::TYPE_DICTIONARY, cellular_apn_fields, NULL 368}; 369 370const OncFieldSignature* GetFieldSignature(const OncValueSignature& signature, 371 const std::string& onc_field_name) { 372 if (!signature.fields) 373 return NULL; 374 for (const OncFieldSignature* field_signature = signature.fields; 375 field_signature->onc_field_name != NULL; ++field_signature) { 376 if (onc_field_name == field_signature->onc_field_name) 377 return field_signature; 378 } 379 if (signature.base_signature) 380 return GetFieldSignature(*signature.base_signature, onc_field_name); 381 return NULL; 382} 383 384namespace { 385 386struct CredentialEntry { 387 const OncValueSignature* value_signature; 388 const char* field_name; 389}; 390 391const CredentialEntry credentials[] = { 392 {&kEAPSignature, ::onc::eap::kPassword}, 393 {&kIPsecSignature, ::onc::ipsec::kPSK}, 394 {&kL2TPSignature, ::onc::vpn::kPassword}, 395 {&kOpenVPNSignature, ::onc::vpn::kPassword}, 396 {&kOpenVPNSignature, ::onc::openvpn::kTLSAuthContents}, 397 {&kWiFiSignature, ::onc::wifi::kPassphrase}, 398 {&kCellularApnSignature, ::onc::cellular_apn::kPassword}, 399 {NULL}}; 400 401} // namespace 402 403bool FieldIsCredential(const OncValueSignature& signature, 404 const std::string& onc_field_name) { 405 for (const CredentialEntry* entry = credentials; 406 entry->value_signature != NULL; ++entry) { 407 if (&signature == entry->value_signature && 408 onc_field_name == entry->field_name) { 409 return true; 410 } 411 } 412 return false; 413} 414 415} // namespace onc 416} // namespace chromeos 417