Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: chrome/browser/chromeos/cros/native_network_parser.cc

Issue 16946002: Resolve certificate references in ONC by PEM. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased, added function comments. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698