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

Side by Side Diff: chromeos/network/network_connection_handler.cc

Issue 161083005: Skip checking certificate properties for L2TP/IPsec VPN using pre-shared key. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "chromeos/network/network_connection_handler.h" 5 #include "chromeos/network/network_connection_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 // been recently configured), we need to check Connectable again. 367 // been recently configured), we need to check Connectable again.
368 if (connectable && type != shill::kTypeVPN) { 368 if (connectable && type != shill::kTypeVPN) {
369 // TODO(stevenjb): Shill needs to properly set Connectable for VPN. 369 // TODO(stevenjb): Shill needs to properly set Connectable for VPN.
370 CallShillConnect(service_path); 370 CallShillConnect(service_path);
371 return; 371 return;
372 } 372 }
373 373
374 // Get VPN provider type and host (required for configuration) and ensure 374 // Get VPN provider type and host (required for configuration) and ensure
375 // that required VPN non-cert properties are set. 375 // that required VPN non-cert properties are set.
376 const base::DictionaryValue* provider_properties = NULL; 376 const base::DictionaryValue* provider_properties = NULL;
377 std::string vpn_provider_type, vpn_provider_host; 377 std::string vpn_provider_type, vpn_provider_host, vpn_client_cert_id;
378 if (type == shill::kTypeVPN) { 378 if (type == shill::kTypeVPN) {
379 // VPN Provider values are read from the "Provider" dictionary, not the 379 // VPN Provider values are read from the "Provider" dictionary, not the
380 // "Provider.Type", etc keys (which are used only to set the values). 380 // "Provider.Type", etc keys (which are used only to set the values).
381 if (service_properties.GetDictionaryWithoutPathExpansion( 381 if (service_properties.GetDictionaryWithoutPathExpansion(
382 shill::kProviderProperty, &provider_properties)) { 382 shill::kProviderProperty, &provider_properties)) {
383 provider_properties->GetStringWithoutPathExpansion( 383 provider_properties->GetStringWithoutPathExpansion(
384 shill::kTypeProperty, &vpn_provider_type); 384 shill::kTypeProperty, &vpn_provider_type);
385 provider_properties->GetStringWithoutPathExpansion( 385 provider_properties->GetStringWithoutPathExpansion(
386 shill::kHostProperty, &vpn_provider_host); 386 shill::kHostProperty, &vpn_provider_host);
387 provider_properties->GetStringWithoutPathExpansion(
388 shill::kL2tpIpsecClientCertIdProperty, &vpn_client_cert_id);
387 } 389 }
388 if (vpn_provider_type.empty() || vpn_provider_host.empty()) { 390 if (vpn_provider_type.empty() || vpn_provider_host.empty()) {
389 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); 391 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired);
390 return; 392 return;
391 } 393 }
392 } 394 }
393 395
396 scoped_ptr<NetworkUIData> ui_data =
397 shill_property_util::GetUIDataFromProperties(service_properties);
398
394 client_cert::ConfigType client_cert_type = client_cert::CONFIG_TYPE_NONE; 399 client_cert::ConfigType client_cert_type = client_cert::CONFIG_TYPE_NONE;
395 if (type == shill::kTypeVPN) { 400 if (type == shill::kTypeVPN) {
396 if (vpn_provider_type == shill::kProviderOpenVpn) 401 if (vpn_provider_type == shill::kProviderOpenVpn) {
397 client_cert_type = client_cert::CONFIG_TYPE_OPENVPN; 402 client_cert_type = client_cert::CONFIG_TYPE_OPENVPN;
398 else 403 } else {
399 client_cert_type = client_cert::CONFIG_TYPE_IPSEC; 404 // L2TP/IPSec only requires a certificate if one is specified in ONC
405 // or one was configured by the UI. Otherwise it is L2TP/IPSec with
406 // PSK and doesn't require a certificate.
407 //
408 // TODO(benchan): Modify shill to specify the authentication type via
409 // the kL2tpIpsecAuthenticationType property, so that Chrome doesn't need
410 // to deduce the authentication type based on the
411 // kL2tpIpsecClientCertIdProperty here (and also in VPNConfigView).
412 if (!vpn_client_cert_id.empty() ||
413 (ui_data && ui_data->certificate_type() != CLIENT_CERT_TYPE_NONE))
414 client_cert_type = client_cert::CONFIG_TYPE_IPSEC;
415 }
400 } else if (type == shill::kTypeWifi && security == shill::kSecurity8021x) { 416 } else if (type == shill::kTypeWifi && security == shill::kSecurity8021x) {
401 client_cert_type = client_cert::CONFIG_TYPE_EAP; 417 client_cert_type = client_cert::CONFIG_TYPE_EAP;
402 } 418 }
403 419
404 base::DictionaryValue config_properties; 420 base::DictionaryValue config_properties;
405 if (client_cert_type != client_cert::CONFIG_TYPE_NONE) { 421 if (client_cert_type != client_cert::CONFIG_TYPE_NONE) {
406 // If the client certificate must be configured, this will be set to a 422 // If the client certificate must be configured, this will be set to a
407 // non-empty string. 423 // non-empty string.
408 std::string pkcs11_id; 424 std::string pkcs11_id;
409 425
410 // Check certificate properties in kUIDataProperty if configured. 426 // Check certificate properties in kUIDataProperty if configured.
411 // Note: Wifi/VPNConfigView set these properties explicitly, in which case 427 // Note: Wifi/VPNConfigView set these properties explicitly, in which case
412 // only the TPM must be configured. 428 // only the TPM must be configured.
413 scoped_ptr<NetworkUIData> ui_data =
414 shill_property_util::GetUIDataFromProperties(service_properties);
415 if (ui_data && ui_data->certificate_type() == CLIENT_CERT_TYPE_PATTERN) { 429 if (ui_data && ui_data->certificate_type() == CLIENT_CERT_TYPE_PATTERN) {
416 // User must be logged in to connect to a network requiring a certificate. 430 // User must be logged in to connect to a network requiring a certificate.
417 if (!logged_in_ || !cert_loader_) { 431 if (!logged_in_ || !cert_loader_) {
418 ErrorCallbackForPendingRequest(service_path, kErrorCertificateRequired); 432 ErrorCallbackForPendingRequest(service_path, kErrorCertificateRequired);
419 return; 433 return;
420 } 434 }
421 435
422 // If certificates have not been loaded yet, queue the connect request. 436 // If certificates have not been loaded yet, queue the connect request.
423 if (!certificates_loaded_) { 437 if (!certificates_loaded_) {
424 NET_LOG_EVENT("Certificates not loaded", ""); 438 NET_LOG_EVENT("Certificates not loaded", "");
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 if (type == shill::kTypeVPN) { 480 if (type == shill::kTypeVPN) {
467 // VPN may require a username, and/or passphrase to be set. (Check after 481 // VPN may require a username, and/or passphrase to be set. (Check after
468 // ensuring that any required certificates are configured). 482 // ensuring that any required certificates are configured).
469 DCHECK(provider_properties); 483 DCHECK(provider_properties);
470 if (VPNRequiresCredentials( 484 if (VPNRequiresCredentials(
471 service_path, vpn_provider_type, *provider_properties)) { 485 service_path, vpn_provider_type, *provider_properties)) {
472 NET_LOG_USER("VPN Requires Credentials", service_path); 486 NET_LOG_USER("VPN Requires Credentials", service_path);
473 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); 487 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired);
474 return; 488 return;
475 } 489 }
490
491 // If it's L2TP/IPsec PSK, there is no properties to configure, so proceed
492 // to connect.
493 if (client_cert_type == client_cert::CONFIG_TYPE_NONE) {
494 CallShillConnect(service_path);
495 return;
496 }
476 } 497 }
477 498
478 if (!config_properties.empty()) { 499 if (!config_properties.empty()) {
479 NET_LOG_EVENT("Configuring Network", service_path); 500 NET_LOG_EVENT("Configuring Network", service_path);
480 network_configuration_handler_->SetProperties( 501 network_configuration_handler_->SetProperties(
481 service_path, 502 service_path,
482 config_properties, 503 config_properties,
483 base::Bind(&NetworkConnectionHandler::CallShillConnect, 504 base::Bind(&NetworkConnectionHandler::CallShillConnect,
484 AsWeakPtr(), 505 AsWeakPtr(),
485 service_path), 506 service_path),
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 697
677 void NetworkConnectionHandler::HandleShillDisconnectSuccess( 698 void NetworkConnectionHandler::HandleShillDisconnectSuccess(
678 const std::string& service_path, 699 const std::string& service_path,
679 const base::Closure& success_callback) { 700 const base::Closure& success_callback) {
680 NET_LOG_EVENT("Disconnect Request Sent", service_path); 701 NET_LOG_EVENT("Disconnect Request Sent", service_path);
681 if (!success_callback.is_null()) 702 if (!success_callback.is_null())
682 success_callback.Run(); 703 success_callback.Run();
683 } 704 }
684 705
685 } // namespace chromeos 706 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698