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); | |
stevenjb
2013/06/21 22:47:13
How expensive is this? It would be better to defer
pneubeck (no reviews)
2013/06/24 08:12:31
It is less expensive than the certificate import (
| |
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); | |
stevenjb
2013/06/21 22:47:13
Same comment about decoding here.
| |
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 |