| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/cros/native_network_parser.h" | 5 #include "chrome/browser/chromeos/cros/native_network_parser.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/logging.h" |
| 9 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| 10 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
| 11 #include "base/values.h" | 12 #include "base/values.h" |
| 12 #include "chrome/browser/chromeos/cros/native_network_constants.h" | 13 #include "chrome/browser/chromeos/cros/native_network_constants.h" |
| 13 #include "chrome/browser/chromeos/cros/network_library.h" | 14 #include "chrome/browser/chromeos/cros/network_library.h" |
| 14 #include "chrome/browser/chromeos/login/user_manager.h" | 15 #include "chrome/browser/chromeos/login/user_manager.h" |
| 16 #include "chromeos/network/onc/onc_utils.h" |
| 17 #include "net/cert/x509_certificate.h" |
| 15 #include "third_party/cros_system_api/dbus/service_constants.h" | 18 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 16 | 19 |
| 17 namespace chromeos { | 20 namespace chromeos { |
| 18 | 21 |
| 19 // Local constants. | 22 // Local constants. |
| 20 namespace { | 23 namespace { |
| 21 | 24 |
| 22 const char kPostMethod[] = "post"; | 25 const char kPostMethod[] = "post"; |
| 23 | 26 |
| 24 EnumMapper<PropertyIndex>::Pair property_index_table[] = { | 27 EnumMapper<PropertyIndex>::Pair property_index_table[] = { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 41 { flimflam::kCheckPortalListProperty, PROPERTY_INDEX_CHECK_PORTAL_LIST }, | 44 { flimflam::kCheckPortalListProperty, PROPERTY_INDEX_CHECK_PORTAL_LIST }, |
| 42 { flimflam::kConnectableProperty, PROPERTY_INDEX_CONNECTABLE }, | 45 { flimflam::kConnectableProperty, PROPERTY_INDEX_CONNECTABLE }, |
| 43 { flimflam::kConnectedTechnologiesProperty, | 46 { flimflam::kConnectedTechnologiesProperty, |
| 44 PROPERTY_INDEX_CONNECTED_TECHNOLOGIES }, | 47 PROPERTY_INDEX_CONNECTED_TECHNOLOGIES }, |
| 45 { flimflam::kDefaultTechnologyProperty, PROPERTY_INDEX_DEFAULT_TECHNOLOGY }, | 48 { flimflam::kDefaultTechnologyProperty, PROPERTY_INDEX_DEFAULT_TECHNOLOGY }, |
| 46 { flimflam::kDeviceProperty, PROPERTY_INDEX_DEVICE }, | 49 { flimflam::kDeviceProperty, PROPERTY_INDEX_DEVICE }, |
| 47 { flimflam::kDevicesProperty, PROPERTY_INDEX_DEVICES }, | 50 { flimflam::kDevicesProperty, PROPERTY_INDEX_DEVICES }, |
| 48 { flimflam::kEapAnonymousIdentityProperty, | 51 { flimflam::kEapAnonymousIdentityProperty, |
| 49 PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY }, | 52 PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY }, |
| 50 { flimflam::kEapCaCertIdProperty, PROPERTY_INDEX_EAP_CA_CERT_ID }, | 53 { flimflam::kEapCaCertIdProperty, PROPERTY_INDEX_EAP_CA_CERT_ID }, |
| 51 { flimflam::kEapCaCertNssProperty, PROPERTY_INDEX_EAP_CA_CERT_NSS }, | 54 { shill::kEapCaCertPemProperty, PROPERTY_INDEX_EAP_CA_CERT_PEM }, |
| 52 { flimflam::kEapCaCertProperty, PROPERTY_INDEX_EAP_CA_CERT }, | |
| 53 { flimflam::kEapCertIdProperty, PROPERTY_INDEX_EAP_CERT_ID }, | 55 { flimflam::kEapCertIdProperty, PROPERTY_INDEX_EAP_CERT_ID }, |
| 54 { flimflam::kEapClientCertNssProperty, PROPERTY_INDEX_EAP_CLIENT_CERT_NSS }, | 56 { flimflam::kEapClientCertNssProperty, PROPERTY_INDEX_EAP_CLIENT_CERT_NSS }, |
| 55 { flimflam::kEapClientCertProperty, PROPERTY_INDEX_EAP_CLIENT_CERT }, | 57 { flimflam::kEapClientCertProperty, PROPERTY_INDEX_EAP_CLIENT_CERT }, |
| 56 { flimflam::kEapIdentityProperty, PROPERTY_INDEX_EAP_IDENTITY }, | 58 { flimflam::kEapIdentityProperty, PROPERTY_INDEX_EAP_IDENTITY }, |
| 57 { flimflam::kEapKeyIdProperty, PROPERTY_INDEX_EAP_KEY_ID }, | 59 { flimflam::kEapKeyIdProperty, PROPERTY_INDEX_EAP_KEY_ID }, |
| 58 { flimflam::kEapKeyMgmtProperty, PROPERTY_INDEX_EAP_KEY_MGMT }, | 60 { flimflam::kEapKeyMgmtProperty, PROPERTY_INDEX_EAP_KEY_MGMT }, |
| 59 { flimflam::kEapMethodProperty, PROPERTY_INDEX_EAP_METHOD }, | 61 { flimflam::kEapMethodProperty, PROPERTY_INDEX_EAP_METHOD }, |
| 60 { flimflam::kEapPasswordProperty, PROPERTY_INDEX_EAP_PASSWORD }, | 62 { flimflam::kEapPasswordProperty, PROPERTY_INDEX_EAP_PASSWORD }, |
| 61 { flimflam::kEapPhase2AuthProperty, PROPERTY_INDEX_EAP_PHASE_2_AUTH }, | 63 { flimflam::kEapPhase2AuthProperty, PROPERTY_INDEX_EAP_PHASE_2_AUTH }, |
| 62 { flimflam::kEapPinProperty, PROPERTY_INDEX_EAP_PIN }, | 64 { flimflam::kEapPinProperty, PROPERTY_INDEX_EAP_PIN }, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 75 { flimflam::kHardwareRevisionProperty, PROPERTY_INDEX_HARDWARE_REVISION }, | 77 { flimflam::kHardwareRevisionProperty, PROPERTY_INDEX_HARDWARE_REVISION }, |
| 76 { flimflam::kHomeProviderProperty, PROPERTY_INDEX_HOME_PROVIDER }, | 78 { flimflam::kHomeProviderProperty, PROPERTY_INDEX_HOME_PROVIDER }, |
| 77 { flimflam::kHostProperty, PROPERTY_INDEX_HOST }, | 79 { flimflam::kHostProperty, PROPERTY_INDEX_HOST }, |
| 78 { flimflam::kIccidProperty, PROPERTY_INDEX_ICCID }, | 80 { flimflam::kIccidProperty, PROPERTY_INDEX_ICCID }, |
| 79 { flimflam::kIdentityProperty, PROPERTY_INDEX_IDENTITY }, | 81 { flimflam::kIdentityProperty, PROPERTY_INDEX_IDENTITY }, |
| 80 { flimflam::kImeiProperty, PROPERTY_INDEX_IMEI }, | 82 { flimflam::kImeiProperty, PROPERTY_INDEX_IMEI }, |
| 81 { flimflam::kImsiProperty, PROPERTY_INDEX_IMSI }, | 83 { flimflam::kImsiProperty, PROPERTY_INDEX_IMSI }, |
| 82 { flimflam::kIsActiveProperty, PROPERTY_INDEX_IS_ACTIVE }, | 84 { flimflam::kIsActiveProperty, PROPERTY_INDEX_IS_ACTIVE }, |
| 83 { flimflam::kL2tpIpsecAuthenticationType, | 85 { flimflam::kL2tpIpsecAuthenticationType, |
| 84 PROPERTY_INDEX_IPSEC_AUTHENTICATIONTYPE }, | 86 PROPERTY_INDEX_IPSEC_AUTHENTICATIONTYPE }, |
| 85 { flimflam::kL2tpIpsecCaCertNssProperty, | 87 { shill::kL2tpIpsecCaCertPemProperty, |
| 86 PROPERTY_INDEX_L2TPIPSEC_CA_CERT_NSS }, | 88 PROPERTY_INDEX_L2TPIPSEC_CA_CERT_PEM }, |
| 87 { flimflam::kL2tpIpsecClientCertIdProperty, | 89 { flimflam::kL2tpIpsecClientCertIdProperty, |
| 88 PROPERTY_INDEX_L2TPIPSEC_CLIENT_CERT_ID }, | 90 PROPERTY_INDEX_L2TPIPSEC_CLIENT_CERT_ID }, |
| 89 { flimflam::kL2tpIpsecClientCertSlotProp, | 91 { flimflam::kL2tpIpsecClientCertSlotProp, |
| 90 PROPERTY_INDEX_L2TPIPSEC_CLIENT_CERT_SLOT }, | 92 PROPERTY_INDEX_L2TPIPSEC_CLIENT_CERT_SLOT }, |
| 91 { flimflam::kL2tpIpsecIkeVersion, PROPERTY_INDEX_IPSEC_IKEVERSION }, | 93 { flimflam::kL2tpIpsecIkeVersion, PROPERTY_INDEX_IPSEC_IKEVERSION }, |
| 92 { flimflam::kL2tpIpsecPinProperty, PROPERTY_INDEX_L2TPIPSEC_PIN }, | 94 { flimflam::kL2tpIpsecPinProperty, PROPERTY_INDEX_L2TPIPSEC_PIN }, |
| 93 { flimflam::kL2tpIpsecPskProperty, PROPERTY_INDEX_L2TPIPSEC_PSK }, | 95 { flimflam::kL2tpIpsecPskProperty, PROPERTY_INDEX_L2TPIPSEC_PSK }, |
| 94 { flimflam::kL2tpIpsecPskRequiredProperty, | 96 { flimflam::kL2tpIpsecPskRequiredProperty, |
| 95 PROPERTY_INDEX_L2TPIPSEC_PSK_REQUIRED }, | 97 PROPERTY_INDEX_L2TPIPSEC_PSK_REQUIRED }, |
| 96 { flimflam::kL2tpIpsecPasswordProperty, PROPERTY_INDEX_L2TPIPSEC_PASSWORD }, | 98 { flimflam::kL2tpIpsecPasswordProperty, PROPERTY_INDEX_L2TPIPSEC_PASSWORD }, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 PROPERTY_INDEX_UNINITIALIZED_TECHNOLOGIES }, | 148 PROPERTY_INDEX_UNINITIALIZED_TECHNOLOGIES }, |
| 147 { flimflam::kUsageURLProperty, PROPERTY_INDEX_USAGE_URL }, | 149 { flimflam::kUsageURLProperty, PROPERTY_INDEX_USAGE_URL }, |
| 148 { flimflam::kOpenVPNClientCertIdProperty, | 150 { flimflam::kOpenVPNClientCertIdProperty, |
| 149 PROPERTY_INDEX_OPEN_VPN_CLIENT_CERT_ID }, | 151 PROPERTY_INDEX_OPEN_VPN_CLIENT_CERT_ID }, |
| 150 { flimflam::kOpenVPNAuthProperty, PROPERTY_INDEX_OPEN_VPN_AUTH }, | 152 { flimflam::kOpenVPNAuthProperty, PROPERTY_INDEX_OPEN_VPN_AUTH }, |
| 151 { flimflam::kOpenVPNAuthRetryProperty, PROPERTY_INDEX_OPEN_VPN_AUTHRETRY }, | 153 { flimflam::kOpenVPNAuthRetryProperty, PROPERTY_INDEX_OPEN_VPN_AUTHRETRY }, |
| 152 { flimflam::kOpenVPNAuthNoCacheProperty, | 154 { flimflam::kOpenVPNAuthNoCacheProperty, |
| 153 PROPERTY_INDEX_OPEN_VPN_AUTHNOCACHE }, | 155 PROPERTY_INDEX_OPEN_VPN_AUTHNOCACHE }, |
| 154 { flimflam::kOpenVPNAuthUserPassProperty, | 156 { flimflam::kOpenVPNAuthUserPassProperty, |
| 155 PROPERTY_INDEX_OPEN_VPN_AUTHUSERPASS }, | 157 PROPERTY_INDEX_OPEN_VPN_AUTHUSERPASS }, |
| 156 { flimflam::kOpenVPNCaCertNSSProperty, PROPERTY_INDEX_OPEN_VPN_CACERT }, | 158 { shill::kOpenVPNCaCertPemProperty, PROPERTY_INDEX_OPEN_VPN_CA_CERT_PEM }, |
| 157 { flimflam::kOpenVPNClientCertSlotProperty, | 159 { flimflam::kOpenVPNClientCertSlotProperty, |
| 158 PROPERTY_INDEX_OPEN_VPN_CLIENT_CERT_SLOT }, | 160 PROPERTY_INDEX_OPEN_VPN_CLIENT_CERT_SLOT }, |
| 159 { flimflam::kOpenVPNCipherProperty, PROPERTY_INDEX_OPEN_VPN_CIPHER }, | 161 { flimflam::kOpenVPNCipherProperty, PROPERTY_INDEX_OPEN_VPN_CIPHER }, |
| 160 { flimflam::kOpenVPNCompLZOProperty, PROPERTY_INDEX_OPEN_VPN_COMPLZO }, | 162 { flimflam::kOpenVPNCompLZOProperty, PROPERTY_INDEX_OPEN_VPN_COMPLZO }, |
| 161 { flimflam::kOpenVPNCompNoAdaptProperty, | 163 { flimflam::kOpenVPNCompNoAdaptProperty, |
| 162 PROPERTY_INDEX_OPEN_VPN_COMPNOADAPT }, | 164 PROPERTY_INDEX_OPEN_VPN_COMPNOADAPT }, |
| 163 { flimflam::kOpenVPNKeyDirectionProperty, | 165 { flimflam::kOpenVPNKeyDirectionProperty, |
| 164 PROPERTY_INDEX_OPEN_VPN_KEYDIRECTION }, | 166 PROPERTY_INDEX_OPEN_VPN_KEYDIRECTION }, |
| 165 { flimflam::kOpenVPNMgmtEnableProperty, | 167 { flimflam::kOpenVPNMgmtEnableProperty, |
| 166 PROPERTY_INDEX_OPEN_VPN_MGMT_ENABLE }, | 168 PROPERTY_INDEX_OPEN_VPN_MGMT_ENABLE }, |
| (...skipping 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1230 wifi_network->set_eap_anonymous_identity(eap_anonymous_identity); | 1232 wifi_network->set_eap_anonymous_identity(eap_anonymous_identity); |
| 1231 return true; | 1233 return true; |
| 1232 } | 1234 } |
| 1233 case PROPERTY_INDEX_EAP_CERT_ID: { | 1235 case PROPERTY_INDEX_EAP_CERT_ID: { |
| 1234 std::string eap_client_cert_pkcs11_id; | 1236 std::string eap_client_cert_pkcs11_id; |
| 1235 if (!value.GetAsString(&eap_client_cert_pkcs11_id)) | 1237 if (!value.GetAsString(&eap_client_cert_pkcs11_id)) |
| 1236 break; | 1238 break; |
| 1237 wifi_network->set_eap_client_cert_pkcs11_id(eap_client_cert_pkcs11_id); | 1239 wifi_network->set_eap_client_cert_pkcs11_id(eap_client_cert_pkcs11_id); |
| 1238 return true; | 1240 return true; |
| 1239 } | 1241 } |
| 1240 case PROPERTY_INDEX_EAP_CA_CERT_NSS: { | 1242 case PROPERTY_INDEX_EAP_CA_CERT_PEM: { |
| 1241 std::string eap_server_ca_cert_nss_nickname; | 1243 std::string eap_server_ca_cert_pem; |
| 1242 if (!value.GetAsString(&eap_server_ca_cert_nss_nickname)) | 1244 if (!value.GetAsString(&eap_server_ca_cert_pem)) |
| 1243 break; | 1245 break; |
| 1244 wifi_network->set_eap_server_ca_cert_nss_nickname( | 1246 |
| 1245 eap_server_ca_cert_nss_nickname); | 1247 scoped_refptr<net::X509Certificate> cert = |
| 1248 onc::DecodePEMCertificate(eap_server_ca_cert_pem); |
| 1249 if (!cert.get()) { |
| 1250 LOG(ERROR) << "Unable to create certificate from PEM encoding."; |
| 1251 return false; |
| 1252 } |
| 1253 |
| 1254 wifi_network->set_eap_server_ca_cert_fingerprint( |
| 1255 onc::GetHexFingerprintOfCert(*cert)); |
| 1246 return true; | 1256 return true; |
| 1247 } | 1257 } |
| 1248 case PROPERTY_INDEX_EAP_USE_SYSTEM_CAS: { | 1258 case PROPERTY_INDEX_EAP_USE_SYSTEM_CAS: { |
| 1249 bool eap_use_system_cas; | 1259 bool eap_use_system_cas; |
| 1250 if (!value.GetAsBoolean(&eap_use_system_cas)) | 1260 if (!value.GetAsBoolean(&eap_use_system_cas)) |
| 1251 break; | 1261 break; |
| 1252 wifi_network->set_eap_use_system_cas(eap_use_system_cas); | 1262 wifi_network->set_eap_use_system_cas(eap_use_system_cas); |
| 1253 return true; | 1263 return true; |
| 1254 } | 1264 } |
| 1255 case PROPERTY_INDEX_EAP_PASSWORD: { | 1265 case PROPERTY_INDEX_EAP_PASSWORD: { |
| 1256 std::string eap_passphrase; | 1266 std::string eap_passphrase; |
| 1257 if (!value.GetAsString(&eap_passphrase)) | 1267 if (!value.GetAsString(&eap_passphrase)) |
| 1258 break; | 1268 break; |
| 1259 wifi_network->set_eap_passphrase(eap_passphrase); | 1269 wifi_network->set_eap_passphrase(eap_passphrase); |
| 1260 return true; | 1270 return true; |
| 1261 } | 1271 } |
| 1262 case PROPERTY_INDEX_EAP_CA_CERT: { | |
| 1263 std::string eap_cert_nickname; | |
| 1264 if (!value.GetAsString(&eap_cert_nickname)) | |
| 1265 break; | |
| 1266 wifi_network->set_eap_server_ca_cert_nss_nickname(eap_cert_nickname); | |
| 1267 return true; | |
| 1268 } | |
| 1269 case PROPERTY_INDEX_WIFI_AUTH_MODE: | 1272 case PROPERTY_INDEX_WIFI_AUTH_MODE: |
| 1270 case PROPERTY_INDEX_WIFI_PHY_MODE: | 1273 case PROPERTY_INDEX_WIFI_PHY_MODE: |
| 1271 case PROPERTY_INDEX_EAP_CLIENT_CERT: | 1274 case PROPERTY_INDEX_EAP_CLIENT_CERT: |
| 1272 case PROPERTY_INDEX_EAP_CLIENT_CERT_NSS: | 1275 case PROPERTY_INDEX_EAP_CLIENT_CERT_NSS: |
| 1273 case PROPERTY_INDEX_EAP_PRIVATE_KEY: | 1276 case PROPERTY_INDEX_EAP_PRIVATE_KEY: |
| 1274 case PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD: | 1277 case PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD: |
| 1275 case PROPERTY_INDEX_EAP_KEY_ID: | 1278 case PROPERTY_INDEX_EAP_KEY_ID: |
| 1276 case PROPERTY_INDEX_EAP_CA_CERT_ID: | 1279 case PROPERTY_INDEX_EAP_CA_CERT_ID: |
| 1277 case PROPERTY_INDEX_EAP_PIN: | 1280 case PROPERTY_INDEX_EAP_PIN: |
| 1278 case PROPERTY_INDEX_EAP_KEY_MGMT: | 1281 case PROPERTY_INDEX_EAP_KEY_MGMT: |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1372 network->set_name(name); | 1375 network->set_name(name); |
| 1373 return true; | 1376 return true; |
| 1374 } | 1377 } |
| 1375 case PROPERTY_INDEX_TYPE: { | 1378 case PROPERTY_INDEX_TYPE: { |
| 1376 std::string provider_type_string; | 1379 std::string provider_type_string; |
| 1377 if (!value.GetAsString(&provider_type_string)) | 1380 if (!value.GetAsString(&provider_type_string)) |
| 1378 break; | 1381 break; |
| 1379 network->set_provider_type(ParseProviderType(provider_type_string)); | 1382 network->set_provider_type(ParseProviderType(provider_type_string)); |
| 1380 return true; | 1383 return true; |
| 1381 } | 1384 } |
| 1382 case PROPERTY_INDEX_L2TPIPSEC_CA_CERT_NSS: | 1385 case PROPERTY_INDEX_L2TPIPSEC_CA_CERT_PEM: |
| 1383 case PROPERTY_INDEX_OPEN_VPN_CACERT: { | 1386 case PROPERTY_INDEX_OPEN_VPN_CA_CERT_PEM: { |
| 1384 std::string ca_cert_nss; | 1387 std::string ca_cert_pem; |
| 1385 if (!value.GetAsString(&ca_cert_nss)) | 1388 if (!value.GetAsString(&ca_cert_pem)) |
| 1386 break; | 1389 break; |
| 1387 network->set_ca_cert_nss(ca_cert_nss); | 1390 |
| 1391 scoped_refptr<net::X509Certificate> cert = |
| 1392 onc::DecodePEMCertificate(ca_cert_pem); |
| 1393 if (!cert.get()) { |
| 1394 LOG(ERROR) << "Unable to create certificate from PEM encoding."; |
| 1395 return false; |
| 1396 } |
| 1397 |
| 1398 network->set_ca_cert_fingerprint(onc::GetHexFingerprintOfCert(*cert)); |
| 1388 return true; | 1399 return true; |
| 1389 } | 1400 } |
| 1390 case PROPERTY_INDEX_L2TPIPSEC_PSK: { | 1401 case PROPERTY_INDEX_L2TPIPSEC_PSK: { |
| 1391 std::string psk_passphrase; | 1402 std::string psk_passphrase; |
| 1392 if (!value.GetAsString(&psk_passphrase)) | 1403 if (!value.GetAsString(&psk_passphrase)) |
| 1393 break; | 1404 break; |
| 1394 network->set_psk_passphrase(psk_passphrase); | 1405 network->set_psk_passphrase(psk_passphrase); |
| 1395 return true; | 1406 return true; |
| 1396 } | 1407 } |
| 1397 case PROPERTY_INDEX_L2TPIPSEC_PSK_REQUIRED: { | 1408 case PROPERTY_INDEX_L2TPIPSEC_PSK_REQUIRED: { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1453 PROVIDER_TYPE_MAX)); | 1464 PROVIDER_TYPE_MAX)); |
| 1454 return &parser; | 1465 return &parser; |
| 1455 } | 1466 } |
| 1456 | 1467 |
| 1457 ProviderType NativeVirtualNetworkParser::ParseProviderType( | 1468 ProviderType NativeVirtualNetworkParser::ParseProviderType( |
| 1458 const std::string& type) { | 1469 const std::string& type) { |
| 1459 return provider_type_mapper()->Get(type); | 1470 return provider_type_mapper()->Get(type); |
| 1460 } | 1471 } |
| 1461 | 1472 |
| 1462 } // namespace chromeos | 1473 } // namespace chromeos |
| OLD | NEW |