| OLD | NEW |
| 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/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); | 415 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); |
| 416 return; | 416 return; |
| 417 } | 417 } |
| 418 } | 418 } |
| 419 | 419 |
| 420 std::string guid; | 420 std::string guid; |
| 421 service_properties.GetStringWithoutPathExpansion(shill::kGuidProperty, &guid); | 421 service_properties.GetStringWithoutPathExpansion(shill::kGuidProperty, &guid); |
| 422 std::string profile; | 422 std::string profile; |
| 423 service_properties.GetStringWithoutPathExpansion(shill::kProfileProperty, | 423 service_properties.GetStringWithoutPathExpansion(shill::kProfileProperty, |
| 424 &profile); | 424 &profile); |
| 425 const base::DictionaryValue* user_policy = | 425 ::onc::ONCSource onc_source = onc::ONC_SOURCE_NONE; |
| 426 managed_configuration_handler_->FindPolicyByGuidAndProfile(guid, profile); | 426 const base::DictionaryValue* policy = |
| 427 managed_configuration_handler_->FindPolicyByGuidAndProfile(guid, profile, |
| 428 &onc_source); |
| 427 | 429 |
| 428 if (IsNetworkProhibitedByPolicy(type, guid, profile)) { | 430 if (IsNetworkProhibitedByPolicy(type, guid, profile)) { |
| 429 ErrorCallbackForPendingRequest(service_path, kErrorUnmanagedNetwork); | 431 ErrorCallbackForPendingRequest(service_path, kErrorUnmanagedNetwork); |
| 430 return; | 432 return; |
| 431 } | 433 } |
| 432 | 434 |
| 433 client_cert::ClientCertConfig cert_config_from_policy; | 435 client_cert::ClientCertConfig cert_config_from_policy; |
| 434 if (user_policy) | 436 if (policy) { |
| 435 client_cert::OncToClientCertConfig(*user_policy, &cert_config_from_policy); | 437 client_cert::OncToClientCertConfig(onc_source, *policy, |
| 438 &cert_config_from_policy); |
| 439 } |
| 436 | 440 |
| 437 client_cert::ConfigType client_cert_type = client_cert::CONFIG_TYPE_NONE; | 441 client_cert::ConfigType client_cert_type = client_cert::CONFIG_TYPE_NONE; |
| 438 if (type == shill::kTypeVPN) { | 442 if (type == shill::kTypeVPN) { |
| 439 if (vpn_provider_type == shill::kProviderOpenVpn) { | 443 if (vpn_provider_type == shill::kProviderOpenVpn) { |
| 440 client_cert_type = client_cert::CONFIG_TYPE_OPENVPN; | 444 client_cert_type = client_cert::CONFIG_TYPE_OPENVPN; |
| 441 } else { | 445 } else { |
| 442 // L2TP/IPSec only requires a certificate if one is specified in ONC | 446 // L2TP/IPSec only requires a certificate if one is specified in ONC |
| 443 // or one was configured by the UI. Otherwise it is L2TP/IPSec with | 447 // or one was configured by the UI. Otherwise it is L2TP/IPSec with |
| 444 // PSK and doesn't require a certificate. | 448 // PSK and doesn't require a certificate. |
| 445 // | 449 // |
| (...skipping 28 matching lines...) Expand all Loading... |
| 474 if (!certificates_loaded_) { | 478 if (!certificates_loaded_) { |
| 475 NET_LOG_EVENT("Certificates not loaded", ""); | 479 NET_LOG_EVENT("Certificates not loaded", ""); |
| 476 QueueConnectRequest(service_path); | 480 QueueConnectRequest(service_path); |
| 477 return; | 481 return; |
| 478 } | 482 } |
| 479 | 483 |
| 480 // Check certificate properties from policy. | 484 // Check certificate properties from policy. |
| 481 if (cert_config_from_policy.client_cert_type == | 485 if (cert_config_from_policy.client_cert_type == |
| 482 onc::client_cert::kPattern) { | 486 onc::client_cert::kPattern) { |
| 483 if (!ClientCertResolver::ResolveCertificatePatternSync( | 487 if (!ClientCertResolver::ResolveCertificatePatternSync( |
| 484 client_cert_type, | 488 client_cert_type, cert_config_from_policy, &config_properties)) { |
| 485 cert_config_from_policy.pattern, | |
| 486 &config_properties)) { | |
| 487 ErrorCallbackForPendingRequest(service_path, kErrorCertificateRequired); | 489 ErrorCallbackForPendingRequest(service_path, kErrorCertificateRequired); |
| 488 return; | 490 return; |
| 489 } | 491 } |
| 490 } else if (check_error_state && | 492 } else if (check_error_state && |
| 491 !client_cert::IsCertificateConfigured(client_cert_type, | 493 !client_cert::IsCertificateConfigured(client_cert_type, |
| 492 service_properties)) { | 494 service_properties)) { |
| 493 // Network may not be configured. | 495 // Network may not be configured. |
| 494 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); | 496 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); |
| 495 return; | 497 return; |
| 496 } | 498 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 if (!global_network_config) | 553 if (!global_network_config) |
| 552 return false; | 554 return false; |
| 553 bool policy_prohibites = false; | 555 bool policy_prohibites = false; |
| 554 if (!global_network_config->GetBooleanWithoutPathExpansion( | 556 if (!global_network_config->GetBooleanWithoutPathExpansion( |
| 555 ::onc::global_network_config::kAllowOnlyPolicyNetworksToConnect, | 557 ::onc::global_network_config::kAllowOnlyPolicyNetworksToConnect, |
| 556 &policy_prohibites) || | 558 &policy_prohibites) || |
| 557 !policy_prohibites) { | 559 !policy_prohibites) { |
| 558 return false; | 560 return false; |
| 559 } | 561 } |
| 560 return !managed_configuration_handler_->FindPolicyByGuidAndProfile( | 562 return !managed_configuration_handler_->FindPolicyByGuidAndProfile( |
| 561 guid, profile_path); | 563 guid, profile_path, nullptr /* onc_source */); |
| 562 } | 564 } |
| 563 | 565 |
| 564 void NetworkConnectionHandler::QueueConnectRequest( | 566 void NetworkConnectionHandler::QueueConnectRequest( |
| 565 const std::string& service_path) { | 567 const std::string& service_path) { |
| 566 ConnectRequest* request = GetPendingRequest(service_path); | 568 ConnectRequest* request = GetPendingRequest(service_path); |
| 567 if (!request) { | 569 if (!request) { |
| 568 NET_LOG_ERROR("No pending request to queue", service_path); | 570 NET_LOG_ERROR("No pending request to queue", service_path); |
| 569 return; | 571 return; |
| 570 } | 572 } |
| 571 | 573 |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 810 | 812 |
| 811 void NetworkConnectionHandler::HandleShillDisconnectSuccess( | 813 void NetworkConnectionHandler::HandleShillDisconnectSuccess( |
| 812 const std::string& service_path, | 814 const std::string& service_path, |
| 813 const base::Closure& success_callback) { | 815 const base::Closure& success_callback) { |
| 814 NET_LOG_EVENT("Disconnect Request Sent", service_path); | 816 NET_LOG_EVENT("Disconnect Request Sent", service_path); |
| 815 if (!success_callback.is_null()) | 817 if (!success_callback.is_null()) |
| 816 success_callback.Run(); | 818 success_callback.Run(); |
| 817 } | 819 } |
| 818 | 820 |
| 819 } // namespace chromeos | 821 } // namespace chromeos |
| OLD | NEW |