1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chromeos/network/onc/onc_signature.h" 6 7#include "components/onc/onc_constants.h" 8#include "third_party/cros_system_api/dbus/service_constants.h" 9 10using base::Value; 11 12namespace chromeos { 13namespace onc { 14namespace { 15 16const OncValueSignature kBoolSignature = { 17 base::Value::TYPE_BOOLEAN, NULL 18}; 19const OncValueSignature kStringSignature = { 20 base::Value::TYPE_STRING, NULL 21}; 22const OncValueSignature kIntegerSignature = { 23 base::Value::TYPE_INTEGER, NULL 24}; 25const OncValueSignature kDoubleSignature = { 26 base::Value::TYPE_DOUBLE, NULL 27}; 28const OncValueSignature kStringListSignature = { 29 base::Value::TYPE_LIST, NULL, &kStringSignature 30}; 31const OncValueSignature kIntegerListSignature = { 32 base::Value::TYPE_LIST, NULL, &kIntegerSignature 33}; 34const OncValueSignature kIPConfigListSignature = { 35 base::Value::TYPE_LIST, NULL, &kIPConfigSignature 36}; 37const OncValueSignature kCellularApnListSignature = { 38 base::Value::TYPE_LIST, NULL, &kCellularApnSignature 39}; 40const OncValueSignature kCellularFoundNetworkListSignature = { 41 base::Value::TYPE_LIST, NULL, &kCellularFoundNetworkSignature 42}; 43 44const OncFieldSignature issuer_subject_pattern_fields[] = { 45 { ::onc::client_cert::kCommonName, &kStringSignature}, 46 { ::onc::client_cert::kLocality, &kStringSignature}, 47 { ::onc::client_cert::kOrganization, &kStringSignature}, 48 { ::onc::client_cert::kOrganizationalUnit, &kStringSignature}, 49 {NULL}}; 50 51const OncFieldSignature certificate_pattern_fields[] = { 52 { ::onc::kRecommended, &kRecommendedSignature}, 53 { ::onc::client_cert::kEnrollmentURI, &kStringListSignature}, 54 { ::onc::client_cert::kIssuer, &kIssuerSubjectPatternSignature}, 55 { ::onc::client_cert::kIssuerCARef, &kStringListSignature}, 56 // Used internally. Not officially supported. 57 { ::onc::client_cert::kIssuerCAPEMs, &kStringListSignature}, 58 { ::onc::client_cert::kSubject, &kIssuerSubjectPatternSignature}, 59 {NULL}}; 60 61const OncFieldSignature eap_fields[] = { 62 { ::onc::kRecommended, &kRecommendedSignature}, 63 { ::onc::eap::kAnonymousIdentity, &kStringSignature}, 64 { ::onc::client_cert::kClientCertPattern, &kCertificatePatternSignature}, 65 { ::onc::client_cert::kClientCertRef, &kStringSignature}, 66 { ::onc::client_cert::kClientCertType, &kStringSignature}, 67 { ::onc::eap::kIdentity, &kStringSignature}, 68 { ::onc::eap::kInner, &kStringSignature}, 69 { ::onc::eap::kOuter, &kStringSignature}, 70 { ::onc::eap::kPassword, &kStringSignature}, 71 { ::onc::eap::kSaveCredentials, &kBoolSignature}, 72 // Used internally. Not officially supported. 73 { ::onc::eap::kServerCAPEMs, &kStringListSignature}, 74 { ::onc::eap::kServerCARef, &kStringSignature}, 75 { ::onc::eap::kServerCARefs, &kStringListSignature}, 76 { ::onc::eap::kUseSystemCAs, &kBoolSignature}, 77 {NULL}}; 78 79const OncFieldSignature ipsec_fields[] = { 80 { ::onc::kRecommended, &kRecommendedSignature}, 81 { ::onc::ipsec::kAuthenticationType, &kStringSignature}, 82 { ::onc::client_cert::kClientCertPattern, &kCertificatePatternSignature}, 83 { ::onc::client_cert::kClientCertRef, &kStringSignature}, 84 { ::onc::client_cert::kClientCertType, &kStringSignature}, 85 { ::onc::ipsec::kGroup, &kStringSignature}, 86 { ::onc::ipsec::kIKEVersion, &kIntegerSignature}, 87 { ::onc::ipsec::kPSK, &kStringSignature}, 88 { ::onc::vpn::kSaveCredentials, &kBoolSignature}, 89 // Used internally. Not officially supported. 90 { ::onc::ipsec::kServerCAPEMs, &kStringListSignature}, 91 { ::onc::ipsec::kServerCARef, &kStringSignature}, 92 { ::onc::ipsec::kServerCARefs, &kStringListSignature}, 93 { ::onc::ipsec::kXAUTH, &kXAUTHSignature}, 94 // Not yet supported. 95 // { ipsec::kEAP, &kEAPSignature }, 96 {NULL}}; 97 98const OncFieldSignature xauth_fields[] = { 99 { ::onc::vpn::kPassword, &kStringSignature}, 100 { ::onc::vpn::kUsername, &kStringSignature}, 101 {NULL}}; 102 103const OncFieldSignature l2tp_fields[] = { 104 { ::onc::kRecommended, &kRecommendedSignature}, 105 { ::onc::vpn::kPassword, &kStringSignature}, 106 { ::onc::vpn::kSaveCredentials, &kBoolSignature}, 107 { ::onc::vpn::kUsername, &kStringSignature}, 108 {NULL}}; 109 110const OncFieldSignature openvpn_fields[] = { 111 { ::onc::kRecommended, &kRecommendedSignature}, 112 { ::onc::openvpn::kAuth, &kStringSignature}, 113 { ::onc::openvpn::kAuthNoCache, &kBoolSignature}, 114 { ::onc::openvpn::kAuthRetry, &kStringSignature}, 115 { ::onc::openvpn::kCipher, &kStringSignature}, 116 { ::onc::client_cert::kClientCertPattern, &kCertificatePatternSignature}, 117 { ::onc::client_cert::kClientCertRef, &kStringSignature}, 118 { ::onc::client_cert::kClientCertType, &kStringSignature}, 119 { ::onc::openvpn::kCompLZO, &kStringSignature}, 120 { ::onc::openvpn::kCompNoAdapt, &kBoolSignature}, 121 { ::onc::openvpn::kIgnoreDefaultRoute, &kBoolSignature}, 122 { ::onc::openvpn::kKeyDirection, &kStringSignature}, 123 { ::onc::openvpn::kNsCertType, &kStringSignature}, 124 { ::onc::vpn::kPassword, &kStringSignature}, 125 { ::onc::openvpn::kPort, &kIntegerSignature}, 126 { ::onc::openvpn::kProto, &kStringSignature}, 127 { ::onc::openvpn::kPushPeerInfo, &kBoolSignature}, 128 { ::onc::openvpn::kRemoteCertEKU, &kStringSignature}, 129 { ::onc::openvpn::kRemoteCertKU, &kStringListSignature}, 130 { ::onc::openvpn::kRemoteCertTLS, &kStringSignature}, 131 { ::onc::openvpn::kRenegSec, &kIntegerSignature}, 132 { ::onc::vpn::kSaveCredentials, &kBoolSignature}, 133 // Used internally. Not officially supported. 134 { ::onc::openvpn::kServerCAPEMs, &kStringListSignature}, 135 { ::onc::openvpn::kServerCARef, &kStringSignature}, 136 { ::onc::openvpn::kServerCARefs, &kStringListSignature}, 137 // Not supported, yet. 138 { ::onc::openvpn::kServerCertPEM, &kStringSignature}, 139 { ::onc::openvpn::kServerCertRef, &kStringSignature}, 140 { ::onc::openvpn::kServerPollTimeout, &kIntegerSignature}, 141 { ::onc::openvpn::kShaper, &kIntegerSignature}, 142 { ::onc::openvpn::kStaticChallenge, &kStringSignature}, 143 { ::onc::openvpn::kTLSAuthContents, &kStringSignature}, 144 { ::onc::openvpn::kTLSRemote, &kStringSignature}, 145 { ::onc::vpn::kUsername, &kStringSignature}, 146 // Not supported, yet. 147 { ::onc::openvpn::kVerb, &kStringSignature}, 148 { ::onc::openvpn::kVerifyHash, &kStringSignature}, 149 { ::onc::openvpn::kVerifyX509, &kVerifyX509Signature}, 150 {NULL}}; 151 152const OncFieldSignature verify_x509_fields[] = { 153 { ::onc::verify_x509::kName, &kStringSignature}, 154 { ::onc::verify_x509::kType, &kStringSignature}, 155 {NULL}}; 156 157const OncFieldSignature vpn_fields[] = { 158 { ::onc::kRecommended, &kRecommendedSignature}, 159 { ::onc::vpn::kAutoConnect, &kBoolSignature}, 160 { ::onc::vpn::kHost, &kStringSignature}, 161 { ::onc::vpn::kIPsec, &kIPsecSignature}, 162 { ::onc::vpn::kL2TP, &kL2TPSignature}, 163 { ::onc::vpn::kOpenVPN, &kOpenVPNSignature}, 164 { ::onc::vpn::kType, &kStringSignature}, 165 {NULL}}; 166 167const OncFieldSignature ethernet_fields[] = { 168 { ::onc::kRecommended, &kRecommendedSignature}, 169 { ::onc::ethernet::kAuthentication, &kStringSignature}, 170 { ::onc::ethernet::kEAP, &kEAPSignature}, 171 {NULL}}; 172 173const OncFieldSignature ipconfig_fields[] = { 174 { ::onc::ipconfig::kGateway, &kStringSignature}, 175 { ::onc::ipconfig::kIPAddress, &kStringSignature}, 176 { ::onc::ipconfig::kNameServers, &kStringListSignature}, 177 { ::onc::ipconfig::kRoutingPrefix, &kIntegerSignature}, 178 { ::onc::network_config::kSearchDomains, &kStringListSignature}, 179 { ::onc::ipconfig::kType, &kStringSignature}, 180 { ::onc::ipconfig::kWebProxyAutoDiscoveryUrl, &kStringSignature}, 181 {NULL}}; 182 183const OncFieldSignature proxy_location_fields[] = { 184 { ::onc::proxy::kHost, &kStringSignature}, 185 { ::onc::proxy::kPort, &kIntegerSignature}, {NULL}}; 186 187const OncFieldSignature proxy_manual_fields[] = { 188 { ::onc::proxy::kFtp, &kProxyLocationSignature}, 189 { ::onc::proxy::kHttp, &kProxyLocationSignature}, 190 { ::onc::proxy::kHttps, &kProxyLocationSignature}, 191 { ::onc::proxy::kSocks, &kProxyLocationSignature}, 192 {NULL}}; 193 194const OncFieldSignature proxy_settings_fields[] = { 195 { ::onc::kRecommended, &kRecommendedSignature}, 196 { ::onc::proxy::kExcludeDomains, &kStringListSignature}, 197 { ::onc::proxy::kManual, &kProxyManualSignature}, 198 { ::onc::proxy::kPAC, &kStringSignature}, 199 { ::onc::proxy::kType, &kStringSignature}, 200 {NULL}}; 201 202const OncFieldSignature wifi_fields[] = { 203 { ::onc::kRecommended, &kRecommendedSignature}, 204 { ::onc::wifi::kAutoConnect, &kBoolSignature}, 205 { ::onc::wifi::kEAP, &kEAPSignature}, 206 { ::onc::wifi::kHiddenSSID, &kBoolSignature}, 207 { ::onc::wifi::kPassphrase, &kStringSignature}, 208 { ::onc::wifi::kSSID, &kStringSignature}, 209 { ::onc::wifi::kSecurity, &kStringSignature}, 210 {NULL}}; 211 212const OncFieldSignature wifi_with_state_fields[] = { 213 { ::onc::wifi::kBSSID, &kStringSignature}, 214 { ::onc::wifi::kFrequency, &kIntegerSignature}, 215 { ::onc::wifi::kFrequencyList, &kIntegerListSignature}, 216 { ::onc::wifi::kSignalStrength, &kIntegerSignature}, 217 {NULL}}; 218 219const OncFieldSignature wimax_fields[] = { 220 { ::onc::kRecommended, &kRecommendedSignature}, 221 { ::onc::wimax::kAutoConnect, &kBoolSignature}, 222 { ::onc::wimax::kEAP, &kEAPSignature}, 223 {NULL}}; 224 225const OncFieldSignature wimax_with_state_fields[] = { 226 { ::onc::wimax::kSignalStrength, &kIntegerSignature}, 227 {NULL}}; 228 229const OncFieldSignature cellular_provider_fields[] = { 230 { ::onc::cellular_provider::kCode, &kStringSignature}, 231 { ::onc::cellular_provider::kCountry, &kStringSignature}, 232 { ::onc::cellular_provider::kName, &kStringSignature}, 233 {NULL}}; 234 235const OncFieldSignature cellular_apn_fields[] = { 236 { ::onc::cellular_apn::kAccessPointName, &kStringSignature}, 237 { ::onc::cellular_apn::kName, &kStringSignature}, 238 { ::onc::cellular_apn::kUsername, &kStringSignature}, 239 { ::onc::cellular_apn::kPassword, &kStringSignature}, 240 { ::onc::cellular_apn::kLocalizedName, &kStringSignature}, 241 { ::onc::cellular_apn::kLanguage, &kStringSignature}, 242 {NULL}}; 243 244const OncFieldSignature cellular_found_network_fields[] = { 245 { ::onc::cellular_found_network::kStatus, &kStringSignature}, 246 { ::onc::cellular_found_network::kNetworkId, &kStringSignature}, 247 { ::onc::cellular_found_network::kShortName, &kStringSignature}, 248 { ::onc::cellular_found_network::kLongName, &kStringSignature}, 249 { ::onc::cellular_found_network::kTechnology, &kStringSignature}, 250 {NULL}}; 251 252const OncFieldSignature sim_lock_status_fields[] = { 253 { ::onc::sim_lock_status::kLockEnabled, &kBoolSignature}, 254 { ::onc::sim_lock_status::kLockType, &kStringSignature}, 255 { ::onc::sim_lock_status::kRetriesLeft, &kDoubleSignature}, 256 {NULL}}; 257 258const OncFieldSignature cellular_fields[] = { 259 { ::onc::kRecommended, &kRecommendedSignature}, 260 { ::onc::cellular::kAPN, &kCellularApnSignature }, 261 { ::onc::cellular::kAPNList, &kCellularApnListSignature}, 262 { ::onc::vpn::kAutoConnect, &kBoolSignature}, 263 {NULL}}; 264 265const OncFieldSignature cellular_with_state_fields[] = { 266 { ::onc::cellular::kActivationType, &kStringSignature}, 267 { ::onc::cellular::kActivationState, &kStringSignature}, 268 { ::onc::cellular::kAllowRoaming, &kBoolSignature}, 269 { ::onc::cellular::kCarrier, &kStringSignature}, 270 { ::onc::cellular::kESN, &kStringSignature}, 271 { ::onc::cellular::kFamily, &kStringSignature}, 272 { ::onc::cellular::kFirmwareRevision, &kStringSignature}, 273 { ::onc::cellular::kFoundNetworks, &kCellularFoundNetworkListSignature}, 274 { ::onc::cellular::kHardwareRevision, &kStringSignature}, 275 { ::onc::cellular::kHomeProvider, &kCellularProviderSignature}, 276 { ::onc::cellular::kICCID, &kStringSignature}, 277 { ::onc::cellular::kIMEI, &kStringSignature}, 278 { ::onc::cellular::kIMSI, &kStringSignature}, 279 { ::onc::cellular::kLastGoodAPN, &kCellularApnSignature }, 280 { ::onc::cellular::kManufacturer, &kStringSignature}, 281 { ::onc::cellular::kMDN, &kStringSignature}, 282 { ::onc::cellular::kMEID, &kStringSignature}, 283 { ::onc::cellular::kMIN, &kStringSignature}, 284 { ::onc::cellular::kModelID, &kStringSignature}, 285 { ::onc::cellular::kNetworkTechnology, &kStringSignature}, 286 { ::onc::cellular::kPRLVersion, &kIntegerSignature}, 287 { ::onc::cellular::kProviderRequiresRoaming, &kBoolSignature}, 288 { ::onc::cellular::kRoamingState, &kStringSignature}, 289 { ::onc::cellular::kServingOperator, &kCellularProviderSignature}, 290 { ::onc::cellular::kSIMLockStatus, &kSIMLockStatusSignature}, 291 { ::onc::cellular::kSIMPresent, &kBoolSignature}, 292 { ::onc::cellular::kSupportNetworkScan, &kBoolSignature}, 293 { ::onc::cellular::kSupportedCarriers, &kStringListSignature}, 294 {NULL}}; 295 296const OncFieldSignature network_configuration_fields[] = { 297 { ::onc::network_config::kCellular, &kCellularSignature}, 298 { ::onc::network_config::kEthernet, &kEthernetSignature}, 299 { ::onc::network_config::kGUID, &kStringSignature}, 300 301 { ::onc::network_config::kName, &kStringSignature}, 302 303 // Not supported, yet. 304 { ::onc::network_config::kNameServers, &kStringListSignature}, 305 306 { ::onc::network_config::kPriority, &kIntegerSignature}, 307 { ::onc::network_config::kProxySettings, &kProxySettingsSignature}, 308 { ::onc::kRecommended, &kRecommendedSignature}, 309 { ::onc::kRemove, &kBoolSignature}, 310 311 // Not supported, yet. 312 { ::onc::network_config::kSearchDomains, &kStringListSignature}, 313 314 { ::onc::network_config::kStaticIPConfig, &kStaticIPConfigSignature}, 315 { ::onc::network_config::kType, &kStringSignature}, 316 { ::onc::network_config::kVPN, &kVPNSignature}, 317 { ::onc::network_config::kWiFi, &kWiFiSignature}, 318 { ::onc::network_config::kWimax, &kWiMAXSignature}, 319 {NULL}}; 320 321const OncFieldSignature network_with_state_fields[] = { 322 { ::onc::network_config::kCellular, &kCellularWithStateSignature}, 323 { ::onc::network_config::kConnectionState, &kStringSignature}, 324 { ::onc::network_config::kConnectable, &kBoolSignature}, 325 { ::onc::network_config::kErrorState, &kStringSignature}, 326 { ::onc::network_config::kIPConfigs, &kIPConfigListSignature}, 327 { ::onc::network_config::kMacAddress, &kStringSignature}, 328 { ::onc::network_config::kRestrictedConnectivity, &kBoolSignature}, 329 { ::onc::network_config::kSavedIPConfig, &kSavedIPConfigSignature}, 330 { ::onc::network_config::kSource, &kStringSignature}, 331 { ::onc::network_config::kWiFi, &kWiFiWithStateSignature}, 332 { ::onc::network_config::kWimax, &kWiMAXWithStateSignature}, 333 {NULL}}; 334 335const OncFieldSignature global_network_configuration_fields[] = { 336 { ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect, 337 &kBoolSignature}, 338 {NULL}}; 339 340const OncFieldSignature certificate_fields[] = { 341 { ::onc::certificate::kGUID, &kStringSignature}, 342 { ::onc::certificate::kPKCS12, &kStringSignature}, 343 { ::onc::kRemove, &kBoolSignature}, 344 { ::onc::certificate::kTrustBits, &kStringListSignature}, 345 { ::onc::certificate::kType, &kStringSignature}, 346 { ::onc::certificate::kX509, &kStringSignature}, 347 {NULL}}; 348 349const OncFieldSignature toplevel_configuration_fields[] = { 350 { ::onc::toplevel_config::kCertificates, &kCertificateListSignature}, 351 { ::onc::toplevel_config::kNetworkConfigurations, 352 &kNetworkConfigurationListSignature}, 353 { ::onc::toplevel_config::kGlobalNetworkConfiguration, 354 &kGlobalNetworkConfigurationSignature}, 355 { ::onc::toplevel_config::kType, &kStringSignature}, 356 { ::onc::encrypted::kCipher, &kStringSignature}, 357 { ::onc::encrypted::kCiphertext, &kStringSignature}, 358 { ::onc::encrypted::kHMAC, &kStringSignature}, 359 { ::onc::encrypted::kHMACMethod, &kStringSignature}, 360 { ::onc::encrypted::kIV, &kStringSignature}, 361 { ::onc::encrypted::kIterations, &kIntegerSignature}, 362 { ::onc::encrypted::kSalt, &kStringSignature}, 363 { ::onc::encrypted::kStretch, &kStringSignature}, {NULL}}; 364 365} // namespace 366 367const OncValueSignature kRecommendedSignature = { 368 base::Value::TYPE_LIST, NULL, &kStringSignature 369}; 370const OncValueSignature kEAPSignature = { 371 base::Value::TYPE_DICTIONARY, eap_fields, NULL 372}; 373const OncValueSignature kIssuerSubjectPatternSignature = { 374 base::Value::TYPE_DICTIONARY, issuer_subject_pattern_fields, NULL 375}; 376const OncValueSignature kCertificatePatternSignature = { 377 base::Value::TYPE_DICTIONARY, certificate_pattern_fields, NULL 378}; 379const OncValueSignature kIPsecSignature = { 380 base::Value::TYPE_DICTIONARY, ipsec_fields, NULL 381}; 382const OncValueSignature kXAUTHSignature = { 383 base::Value::TYPE_DICTIONARY, xauth_fields, NULL 384}; 385const OncValueSignature kL2TPSignature = { 386 base::Value::TYPE_DICTIONARY, l2tp_fields, NULL 387}; 388const OncValueSignature kOpenVPNSignature = { 389 base::Value::TYPE_DICTIONARY, openvpn_fields, NULL 390}; 391const OncValueSignature kVerifyX509Signature = { 392 base::Value::TYPE_DICTIONARY, verify_x509_fields, NULL 393}; 394const OncValueSignature kVPNSignature = { 395 base::Value::TYPE_DICTIONARY, vpn_fields, NULL 396}; 397const OncValueSignature kEthernetSignature = { 398 base::Value::TYPE_DICTIONARY, ethernet_fields, NULL 399}; 400const OncValueSignature kIPConfigSignature = { 401 base::Value::TYPE_DICTIONARY, ipconfig_fields, NULL 402}; 403const OncValueSignature kSavedIPConfigSignature = { 404 base::Value::TYPE_DICTIONARY, ipconfig_fields, NULL 405}; 406const OncValueSignature kStaticIPConfigSignature = { 407 base::Value::TYPE_DICTIONARY, ipconfig_fields, NULL 408}; 409const OncValueSignature kProxyLocationSignature = { 410 base::Value::TYPE_DICTIONARY, proxy_location_fields, NULL 411}; 412const OncValueSignature kProxyManualSignature = { 413 base::Value::TYPE_DICTIONARY, proxy_manual_fields, NULL 414}; 415const OncValueSignature kProxySettingsSignature = { 416 base::Value::TYPE_DICTIONARY, proxy_settings_fields, NULL 417}; 418const OncValueSignature kWiFiSignature = { 419 base::Value::TYPE_DICTIONARY, wifi_fields, NULL 420}; 421const OncValueSignature kWiMAXSignature = { 422 base::Value::TYPE_DICTIONARY, wimax_fields, NULL 423}; 424const OncValueSignature kCertificateSignature = { 425 base::Value::TYPE_DICTIONARY, certificate_fields, NULL 426}; 427const OncValueSignature kNetworkConfigurationSignature = { 428 base::Value::TYPE_DICTIONARY, network_configuration_fields, NULL 429}; 430const OncValueSignature kGlobalNetworkConfigurationSignature = { 431 base::Value::TYPE_DICTIONARY, global_network_configuration_fields, NULL 432}; 433const OncValueSignature kCertificateListSignature = { 434 base::Value::TYPE_LIST, NULL, &kCertificateSignature 435}; 436const OncValueSignature kNetworkConfigurationListSignature = { 437 base::Value::TYPE_LIST, NULL, &kNetworkConfigurationSignature 438}; 439const OncValueSignature kToplevelConfigurationSignature = { 440 base::Value::TYPE_DICTIONARY, toplevel_configuration_fields, NULL 441}; 442 443// Derived "ONC with State" signatures. 444const OncValueSignature kNetworkWithStateSignature = { 445 base::Value::TYPE_DICTIONARY, network_with_state_fields, NULL, 446 &kNetworkConfigurationSignature 447}; 448const OncValueSignature kWiFiWithStateSignature = { 449 base::Value::TYPE_DICTIONARY, wifi_with_state_fields, NULL, &kWiFiSignature 450}; 451const OncValueSignature kWiMAXWithStateSignature = { 452 base::Value::TYPE_DICTIONARY, wimax_with_state_fields, NULL, &kWiMAXSignature 453}; 454const OncValueSignature kCellularSignature = { 455 base::Value::TYPE_DICTIONARY, cellular_fields, NULL 456}; 457const OncValueSignature kCellularWithStateSignature = { 458 base::Value::TYPE_DICTIONARY, cellular_with_state_fields, NULL, 459 &kCellularSignature 460}; 461const OncValueSignature kCellularProviderSignature = { 462 base::Value::TYPE_DICTIONARY, cellular_provider_fields, NULL 463}; 464const OncValueSignature kCellularApnSignature = { 465 base::Value::TYPE_DICTIONARY, cellular_apn_fields, NULL 466}; 467const OncValueSignature kCellularFoundNetworkSignature = { 468 base::Value::TYPE_DICTIONARY, cellular_found_network_fields, NULL 469}; 470const OncValueSignature kSIMLockStatusSignature = { 471 base::Value::TYPE_DICTIONARY, sim_lock_status_fields, NULL 472}; 473 474const OncFieldSignature* GetFieldSignature(const OncValueSignature& signature, 475 const std::string& onc_field_name) { 476 if (!signature.fields) 477 return NULL; 478 for (const OncFieldSignature* field_signature = signature.fields; 479 field_signature->onc_field_name != NULL; ++field_signature) { 480 if (onc_field_name == field_signature->onc_field_name) 481 return field_signature; 482 } 483 if (signature.base_signature) 484 return GetFieldSignature(*signature.base_signature, onc_field_name); 485 return NULL; 486} 487 488namespace { 489 490struct CredentialEntry { 491 const OncValueSignature* value_signature; 492 const char* field_name; 493}; 494 495const CredentialEntry credentials[] = { 496 {&kEAPSignature, ::onc::eap::kPassword}, 497 {&kIPsecSignature, ::onc::ipsec::kPSK}, 498 {&kXAUTHSignature, ::onc::vpn::kPassword}, 499 {&kL2TPSignature, ::onc::vpn::kPassword}, 500 {&kOpenVPNSignature, ::onc::vpn::kPassword}, 501 {&kOpenVPNSignature, ::onc::openvpn::kTLSAuthContents}, 502 {&kWiFiSignature, ::onc::wifi::kPassphrase}, 503 {&kCellularApnSignature, ::onc::cellular_apn::kPassword}, 504 {NULL}}; 505 506} // namespace 507 508bool FieldIsCredential(const OncValueSignature& signature, 509 const std::string& onc_field_name) { 510 for (const CredentialEntry* entry = credentials; 511 entry->value_signature != NULL; ++entry) { 512 if (&signature == entry->value_signature && 513 onc_field_name == entry->field_name) { 514 return true; 515 } 516 } 517 return false; 518} 519 520} // namespace onc 521} // namespace chromeos 522