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 10 using base::Value; 11 12 namespace chromeos { 13 namespace onc { 14 namespace { 15 16 const OncValueSignature kBoolSignature = { 17 base::Value::TYPE_BOOLEAN, NULL 18 }; 19 const OncValueSignature kStringSignature = { 20 base::Value::TYPE_STRING, NULL 21 }; 22 const OncValueSignature kIntegerSignature = { 23 base::Value::TYPE_INTEGER, NULL 24 }; 25 const OncValueSignature kDoubleSignature = { 26 base::Value::TYPE_DOUBLE, NULL 27 }; 28 const OncValueSignature kStringListSignature = { 29 base::Value::TYPE_LIST, NULL, &kStringSignature 30 }; 31 const OncValueSignature kIntegerListSignature = { 32 base::Value::TYPE_LIST, NULL, &kIntegerSignature 33 }; 34 const OncValueSignature kIPConfigListSignature = { 35 base::Value::TYPE_LIST, NULL, &kIPConfigSignature 36 }; 37 const OncValueSignature kCellularApnListSignature = { 38 base::Value::TYPE_LIST, NULL, &kCellularApnSignature 39 }; 40 const OncValueSignature kCellularFoundNetworkListSignature = { 41 base::Value::TYPE_LIST, NULL, &kCellularFoundNetworkSignature 42 }; 43 44 const 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 51 const 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 61 const 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 79 const 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 98 const OncFieldSignature xauth_fields[] = { 99 { ::onc::vpn::kPassword, &kStringSignature}, 100 { ::onc::vpn::kUsername, &kStringSignature}, 101 {NULL}}; 102 103 const 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 110 const 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 152 const OncFieldSignature verify_x509_fields[] = { 153 { ::onc::verify_x509::kName, &kStringSignature}, 154 { ::onc::verify_x509::kType, &kStringSignature}, 155 {NULL}}; 156 157 const 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 167 const OncFieldSignature ethernet_fields[] = { 168 { ::onc::kRecommended, &kRecommendedSignature}, 169 { ::onc::ethernet::kAuthentication, &kStringSignature}, 170 { ::onc::ethernet::kEAP, &kEAPSignature}, 171 {NULL}}; 172 173 const 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 183 const OncFieldSignature proxy_location_fields[] = { 184 { ::onc::proxy::kHost, &kStringSignature}, 185 { ::onc::proxy::kPort, &kIntegerSignature}, {NULL}}; 186 187 const 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 194 const 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 202 const 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 212 const 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 219 const OncFieldSignature wimax_fields[] = { 220 { ::onc::kRecommended, &kRecommendedSignature}, 221 { ::onc::wimax::kAutoConnect, &kBoolSignature}, 222 { ::onc::wimax::kEAP, &kEAPSignature}, 223 {NULL}}; 224 225 const OncFieldSignature wimax_with_state_fields[] = { 226 { ::onc::wimax::kSignalStrength, &kIntegerSignature}, 227 {NULL}}; 228 229 const 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 235 const 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 244 const 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 252 const 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 258 const 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 265 const 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 296 const 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 321 const 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 335 const OncFieldSignature global_network_configuration_fields[] = { 336 { ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect, 337 &kBoolSignature}, 338 {NULL}}; 339 340 const 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 349 const 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 367 const OncValueSignature kRecommendedSignature = { 368 base::Value::TYPE_LIST, NULL, &kStringSignature 369 }; 370 const OncValueSignature kEAPSignature = { 371 base::Value::TYPE_DICTIONARY, eap_fields, NULL 372 }; 373 const OncValueSignature kIssuerSubjectPatternSignature = { 374 base::Value::TYPE_DICTIONARY, issuer_subject_pattern_fields, NULL 375 }; 376 const OncValueSignature kCertificatePatternSignature = { 377 base::Value::TYPE_DICTIONARY, certificate_pattern_fields, NULL 378 }; 379 const OncValueSignature kIPsecSignature = { 380 base::Value::TYPE_DICTIONARY, ipsec_fields, NULL 381 }; 382 const OncValueSignature kXAUTHSignature = { 383 base::Value::TYPE_DICTIONARY, xauth_fields, NULL 384 }; 385 const OncValueSignature kL2TPSignature = { 386 base::Value::TYPE_DICTIONARY, l2tp_fields, NULL 387 }; 388 const OncValueSignature kOpenVPNSignature = { 389 base::Value::TYPE_DICTIONARY, openvpn_fields, NULL 390 }; 391 const OncValueSignature kVerifyX509Signature = { 392 base::Value::TYPE_DICTIONARY, verify_x509_fields, NULL 393 }; 394 const OncValueSignature kVPNSignature = { 395 base::Value::TYPE_DICTIONARY, vpn_fields, NULL 396 }; 397 const OncValueSignature kEthernetSignature = { 398 base::Value::TYPE_DICTIONARY, ethernet_fields, NULL 399 }; 400 const OncValueSignature kIPConfigSignature = { 401 base::Value::TYPE_DICTIONARY, ipconfig_fields, NULL 402 }; 403 const OncValueSignature kSavedIPConfigSignature = { 404 base::Value::TYPE_DICTIONARY, ipconfig_fields, NULL 405 }; 406 const OncValueSignature kStaticIPConfigSignature = { 407 base::Value::TYPE_DICTIONARY, ipconfig_fields, NULL 408 }; 409 const OncValueSignature kProxyLocationSignature = { 410 base::Value::TYPE_DICTIONARY, proxy_location_fields, NULL 411 }; 412 const OncValueSignature kProxyManualSignature = { 413 base::Value::TYPE_DICTIONARY, proxy_manual_fields, NULL 414 }; 415 const OncValueSignature kProxySettingsSignature = { 416 base::Value::TYPE_DICTIONARY, proxy_settings_fields, NULL 417 }; 418 const OncValueSignature kWiFiSignature = { 419 base::Value::TYPE_DICTIONARY, wifi_fields, NULL 420 }; 421 const OncValueSignature kWiMAXSignature = { 422 base::Value::TYPE_DICTIONARY, wimax_fields, NULL 423 }; 424 const OncValueSignature kCertificateSignature = { 425 base::Value::TYPE_DICTIONARY, certificate_fields, NULL 426 }; 427 const OncValueSignature kNetworkConfigurationSignature = { 428 base::Value::TYPE_DICTIONARY, network_configuration_fields, NULL 429 }; 430 const OncValueSignature kGlobalNetworkConfigurationSignature = { 431 base::Value::TYPE_DICTIONARY, global_network_configuration_fields, NULL 432 }; 433 const OncValueSignature kCertificateListSignature = { 434 base::Value::TYPE_LIST, NULL, &kCertificateSignature 435 }; 436 const OncValueSignature kNetworkConfigurationListSignature = { 437 base::Value::TYPE_LIST, NULL, &kNetworkConfigurationSignature 438 }; 439 const OncValueSignature kToplevelConfigurationSignature = { 440 base::Value::TYPE_DICTIONARY, toplevel_configuration_fields, NULL 441 }; 442 443 // Derived "ONC with State" signatures. 444 const OncValueSignature kNetworkWithStateSignature = { 445 base::Value::TYPE_DICTIONARY, network_with_state_fields, NULL, 446 &kNetworkConfigurationSignature 447 }; 448 const OncValueSignature kWiFiWithStateSignature = { 449 base::Value::TYPE_DICTIONARY, wifi_with_state_fields, NULL, &kWiFiSignature 450 }; 451 const OncValueSignature kWiMAXWithStateSignature = { 452 base::Value::TYPE_DICTIONARY, wimax_with_state_fields, NULL, &kWiMAXSignature 453 }; 454 const OncValueSignature kCellularSignature = { 455 base::Value::TYPE_DICTIONARY, cellular_fields, NULL 456 }; 457 const OncValueSignature kCellularWithStateSignature = { 458 base::Value::TYPE_DICTIONARY, cellular_with_state_fields, NULL, 459 &kCellularSignature 460 }; 461 const OncValueSignature kCellularProviderSignature = { 462 base::Value::TYPE_DICTIONARY, cellular_provider_fields, NULL 463 }; 464 const OncValueSignature kCellularApnSignature = { 465 base::Value::TYPE_DICTIONARY, cellular_apn_fields, NULL 466 }; 467 const OncValueSignature kCellularFoundNetworkSignature = { 468 base::Value::TYPE_DICTIONARY, cellular_found_network_fields, NULL 469 }; 470 const OncValueSignature kSIMLockStatusSignature = { 471 base::Value::TYPE_DICTIONARY, sim_lock_status_fields, NULL 472 }; 473 474 const 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 488 namespace { 489 490 struct CredentialEntry { 491 const OncValueSignature* value_signature; 492 const char* field_name; 493 }; 494 495 const 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 508 bool 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