onc_signature.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
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 173// Not supported for policy but for reading network state. 174const OncFieldSignature ipconfig_fields[] = { 175 { ::onc::ipconfig::kGateway, &kStringSignature}, 176 { ::onc::ipconfig::kIPAddress, &kStringSignature}, 177 { ::onc::ipconfig::kNameServers, &kStringListSignature}, 178 { ::onc::ipconfig::kRoutingPrefix, &kIntegerSignature}, 179 { ::onc::network_config::kSearchDomains, &kStringListSignature}, 180 { ::onc::ipconfig::kType, &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 cellular_provider_fields[] = { 220 { ::onc::cellular_provider::kCode, &kStringSignature}, 221 { ::onc::cellular_provider::kCountry, &kStringSignature}, 222 { ::onc::cellular_provider::kName, &kStringSignature}, 223 {NULL}}; 224 225const OncFieldSignature cellular_apn_fields[] = { 226 { ::onc::cellular_apn::kName, &kStringSignature}, 227 { ::onc::cellular_apn::kUsername, &kStringSignature}, 228 { ::onc::cellular_apn::kPassword, &kStringSignature}, 229 { ::onc::cellular_apn::kLocalizedName, &kStringSignature}, 230 { ::onc::cellular_apn::kLanguage, &kStringSignature}, 231 {NULL}}; 232 233const OncFieldSignature cellular_found_network_fields[] = { 234 { ::onc::cellular_found_network::kStatus, &kStringSignature}, 235 { ::onc::cellular_found_network::kNetworkId, &kStringSignature}, 236 { ::onc::cellular_found_network::kShortName, &kStringSignature}, 237 { ::onc::cellular_found_network::kLongName, &kStringSignature}, 238 { ::onc::cellular_found_network::kTechnology, &kStringSignature}, 239 {NULL}}; 240 241const OncFieldSignature sim_lock_status_fields[] = { 242 { ::onc::sim_lock_status::kLockEnabled, &kBoolSignature}, 243 { ::onc::sim_lock_status::kLockType, &kStringSignature}, 244 { ::onc::sim_lock_status::kRetriesLeft, &kDoubleSignature}, 245 {NULL}}; 246 247const OncFieldSignature cellular_fields[] = { 248 { ::onc::kRecommended, &kRecommendedSignature}, 249 { ::onc::cellular::kAPN, &kCellularApnSignature }, 250 { ::onc::cellular::kAPNList, &kCellularApnListSignature}, 251 {NULL}}; 252 253const OncFieldSignature cellular_with_state_fields[] = { 254 { ::onc::cellular::kActivationType, &kStringSignature}, 255 { ::onc::cellular::kActivationState, &kStringSignature}, 256 { ::onc::cellular::kAllowRoaming, &kBoolSignature}, 257 { ::onc::cellular::kCarrier, &kStringSignature}, 258 { ::onc::cellular::kESN, &kStringSignature}, 259 { ::onc::cellular::kFamily, &kStringSignature}, 260 { ::onc::cellular::kFirmwareRevision, &kStringSignature}, 261 { ::onc::cellular::kFoundNetworks, &kCellularFoundNetworkListSignature}, 262 { ::onc::cellular::kHardwareRevision, &kStringSignature}, 263 { ::onc::cellular::kHomeProvider, &kCellularProviderSignature}, 264 { ::onc::cellular::kICCID, &kStringSignature}, 265 { ::onc::cellular::kIMEI, &kStringSignature}, 266 { ::onc::cellular::kIMSI, &kStringSignature}, 267 { ::onc::cellular::kManufacturer, &kStringSignature}, 268 { ::onc::cellular::kMDN, &kStringSignature}, 269 { ::onc::cellular::kMEID, &kStringSignature}, 270 { ::onc::cellular::kMIN, &kStringSignature}, 271 { ::onc::cellular::kModelID, &kStringSignature}, 272 { ::onc::cellular::kNetworkTechnology, &kStringSignature}, 273 { ::onc::cellular::kPRLVersion, &kIntegerSignature}, 274 { ::onc::cellular::kProviderRequiresRoaming, &kBoolSignature}, 275 { ::onc::cellular::kRoamingState, &kStringSignature}, 276 { ::onc::cellular::kSelectedNetwork, &kStringSignature}, 277 { ::onc::cellular::kServingOperator, &kCellularProviderSignature}, 278 { ::onc::cellular::kSIMLockStatus, &kSIMLockStatusSignature}, 279 { ::onc::cellular::kSIMPresent, &kBoolSignature}, 280 { ::onc::cellular::kSupportNetworkScan, &kBoolSignature}, 281 { ::onc::cellular::kSupportedCarriers, &kStringListSignature}, 282 {NULL}}; 283 284const OncFieldSignature network_configuration_fields[] = { 285 { ::onc::kRecommended, &kRecommendedSignature}, 286 { ::onc::network_config::kEthernet, &kEthernetSignature}, 287 { ::onc::network_config::kGUID, &kStringSignature}, 288 // Not supported for policy but for reading network state. 289 { ::onc::network_config::kIPConfigs, &kIPConfigListSignature}, 290 { ::onc::network_config::kName, &kStringSignature}, 291 // Not supported, yet. 292 { ::onc::network_config::kNameServers, &kStringListSignature}, 293 { ::onc::network_config::kPriority, &kIntegerSignature}, 294 { ::onc::network_config::kProxySettings, &kProxySettingsSignature}, 295 { ::onc::kRemove, &kBoolSignature}, 296 // Not supported, yet. 297 { ::onc::network_config::kSearchDomains, &kStringListSignature}, 298 { ::onc::network_config::kType, &kStringSignature}, 299 { ::onc::network_config::kVPN, &kVPNSignature}, 300 { ::onc::network_config::kWiFi, &kWiFiSignature}, 301 { ::onc::network_config::kCellular, &kCellularSignature}, 302 {NULL}}; 303 304const OncFieldSignature network_with_state_fields[] = { 305 { ::onc::network_config::kCellular, &kCellularWithStateSignature}, 306 { ::onc::network_config::kConnectionState, &kStringSignature}, 307 { ::onc::network_config::kConnectable, &kBoolSignature}, 308 { ::onc::network_config::kErrorState, &kStringSignature}, 309 { ::onc::network_config::kMacAddress, &kStringSignature}, 310 { ::onc::network_config::kWiFi, &kWiFiWithStateSignature}, 311 {NULL}}; 312 313const OncFieldSignature global_network_configuration_fields[] = { 314 { ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect, 315 &kBoolSignature}, 316 {NULL}}; 317 318const OncFieldSignature certificate_fields[] = { 319 { ::onc::certificate::kGUID, &kStringSignature}, 320 { ::onc::certificate::kPKCS12, &kStringSignature}, 321 { ::onc::kRemove, &kBoolSignature}, 322 { ::onc::certificate::kTrustBits, &kStringListSignature}, 323 { ::onc::certificate::kType, &kStringSignature}, 324 { ::onc::certificate::kX509, &kStringSignature}, 325 {NULL}}; 326 327const OncFieldSignature toplevel_configuration_fields[] = { 328 { ::onc::toplevel_config::kCertificates, &kCertificateListSignature}, 329 { ::onc::toplevel_config::kNetworkConfigurations, 330 &kNetworkConfigurationListSignature}, 331 { ::onc::toplevel_config::kGlobalNetworkConfiguration, 332 &kGlobalNetworkConfigurationSignature}, 333 { ::onc::toplevel_config::kType, &kStringSignature}, 334 { ::onc::encrypted::kCipher, &kStringSignature}, 335 { ::onc::encrypted::kCiphertext, &kStringSignature}, 336 { ::onc::encrypted::kHMAC, &kStringSignature}, 337 { ::onc::encrypted::kHMACMethod, &kStringSignature}, 338 { ::onc::encrypted::kIV, &kStringSignature}, 339 { ::onc::encrypted::kIterations, &kIntegerSignature}, 340 { ::onc::encrypted::kSalt, &kStringSignature}, 341 { ::onc::encrypted::kStretch, &kStringSignature}, {NULL}}; 342 343} // namespace 344 345const OncValueSignature kRecommendedSignature = { 346 base::Value::TYPE_LIST, NULL, &kStringSignature 347}; 348const OncValueSignature kEAPSignature = { 349 base::Value::TYPE_DICTIONARY, eap_fields, NULL 350}; 351const OncValueSignature kIssuerSubjectPatternSignature = { 352 base::Value::TYPE_DICTIONARY, issuer_subject_pattern_fields, NULL 353}; 354const OncValueSignature kCertificatePatternSignature = { 355 base::Value::TYPE_DICTIONARY, certificate_pattern_fields, NULL 356}; 357const OncValueSignature kIPsecSignature = { 358 base::Value::TYPE_DICTIONARY, ipsec_fields, NULL 359}; 360const OncValueSignature kXAUTHSignature = { 361 base::Value::TYPE_DICTIONARY, xauth_fields, NULL 362}; 363const OncValueSignature kL2TPSignature = { 364 base::Value::TYPE_DICTIONARY, l2tp_fields, NULL 365}; 366const OncValueSignature kOpenVPNSignature = { 367 base::Value::TYPE_DICTIONARY, openvpn_fields, NULL 368}; 369const OncValueSignature kVerifyX509Signature = { 370 base::Value::TYPE_DICTIONARY, verify_x509_fields, NULL 371}; 372const OncValueSignature kVPNSignature = { 373 base::Value::TYPE_DICTIONARY, vpn_fields, NULL 374}; 375const OncValueSignature kEthernetSignature = { 376 base::Value::TYPE_DICTIONARY, ethernet_fields, NULL 377}; 378const OncValueSignature kIPConfigSignature = { 379 base::Value::TYPE_DICTIONARY, ipconfig_fields, NULL 380}; 381const OncValueSignature kProxyLocationSignature = { 382 base::Value::TYPE_DICTIONARY, proxy_location_fields, NULL 383}; 384const OncValueSignature kProxyManualSignature = { 385 base::Value::TYPE_DICTIONARY, proxy_manual_fields, NULL 386}; 387const OncValueSignature kProxySettingsSignature = { 388 base::Value::TYPE_DICTIONARY, proxy_settings_fields, NULL 389}; 390const OncValueSignature kWiFiSignature = { 391 base::Value::TYPE_DICTIONARY, wifi_fields, NULL 392}; 393const OncValueSignature kCertificateSignature = { 394 base::Value::TYPE_DICTIONARY, certificate_fields, NULL 395}; 396const OncValueSignature kNetworkConfigurationSignature = { 397 base::Value::TYPE_DICTIONARY, network_configuration_fields, NULL 398}; 399const OncValueSignature kGlobalNetworkConfigurationSignature = { 400 base::Value::TYPE_DICTIONARY, global_network_configuration_fields, NULL 401}; 402const OncValueSignature kCertificateListSignature = { 403 base::Value::TYPE_LIST, NULL, &kCertificateSignature 404}; 405const OncValueSignature kNetworkConfigurationListSignature = { 406 base::Value::TYPE_LIST, NULL, &kNetworkConfigurationSignature 407}; 408const OncValueSignature kToplevelConfigurationSignature = { 409 base::Value::TYPE_DICTIONARY, toplevel_configuration_fields, NULL 410}; 411 412// Derived "ONC with State" signatures. 413const OncValueSignature kNetworkWithStateSignature = { 414 base::Value::TYPE_DICTIONARY, network_with_state_fields, NULL, 415 &kNetworkConfigurationSignature 416}; 417const OncValueSignature kWiFiWithStateSignature = { 418 base::Value::TYPE_DICTIONARY, wifi_with_state_fields, NULL, &kWiFiSignature 419}; 420const OncValueSignature kCellularSignature = { 421 base::Value::TYPE_DICTIONARY, cellular_fields, NULL 422}; 423const OncValueSignature kCellularWithStateSignature = { 424 base::Value::TYPE_DICTIONARY, cellular_with_state_fields, NULL, 425 &kCellularSignature 426}; 427const OncValueSignature kCellularProviderSignature = { 428 base::Value::TYPE_DICTIONARY, cellular_provider_fields, NULL 429}; 430const OncValueSignature kCellularApnSignature = { 431 base::Value::TYPE_DICTIONARY, cellular_apn_fields, NULL 432}; 433const OncValueSignature kCellularFoundNetworkSignature = { 434 base::Value::TYPE_DICTIONARY, cellular_found_network_fields, NULL 435}; 436const OncValueSignature kSIMLockStatusSignature = { 437 base::Value::TYPE_DICTIONARY, sim_lock_status_fields, NULL 438}; 439 440const OncFieldSignature* GetFieldSignature(const OncValueSignature& signature, 441 const std::string& onc_field_name) { 442 if (!signature.fields) 443 return NULL; 444 for (const OncFieldSignature* field_signature = signature.fields; 445 field_signature->onc_field_name != NULL; ++field_signature) { 446 if (onc_field_name == field_signature->onc_field_name) 447 return field_signature; 448 } 449 if (signature.base_signature) 450 return GetFieldSignature(*signature.base_signature, onc_field_name); 451 return NULL; 452} 453 454namespace { 455 456struct CredentialEntry { 457 const OncValueSignature* value_signature; 458 const char* field_name; 459}; 460 461const CredentialEntry credentials[] = { 462 {&kEAPSignature, ::onc::eap::kPassword}, 463 {&kIPsecSignature, ::onc::ipsec::kPSK}, 464 {&kXAUTHSignature, ::onc::vpn::kPassword}, 465 {&kL2TPSignature, ::onc::vpn::kPassword}, 466 {&kOpenVPNSignature, ::onc::vpn::kPassword}, 467 {&kOpenVPNSignature, ::onc::openvpn::kTLSAuthContents}, 468 {&kWiFiSignature, ::onc::wifi::kPassphrase}, 469 {&kCellularApnSignature, ::onc::cellular_apn::kPassword}, 470 {NULL}}; 471 472} // namespace 473 474bool FieldIsCredential(const OncValueSignature& signature, 475 const std::string& onc_field_name) { 476 for (const CredentialEntry* entry = credentials; 477 entry->value_signature != NULL; ++entry) { 478 if (&signature == entry->value_signature && 479 onc_field_name == entry->field_name) { 480 return true; 481 } 482 } 483 return false; 484} 485 486} // namespace onc 487} // namespace chromeos 488