Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/client_cert_resolver.h" | 5 #include "chromeos/network/client_cert_resolver.h" |
| 6 | 6 |
| 7 #include <cert.h> | 7 #include <cert.h> |
| 8 #include <certt.h> // for (SECCertUsageEnum) certUsageAnyCA | 8 #include <certt.h> // for (SECCertUsageEnum) certUsageAnyCA |
| 9 #include <pk11pub.h> | 9 #include <pk11pub.h> |
| 10 | 10 |
| 11 #include <algorithm> | 11 #include <algorithm> |
| 12 #include <string> | 12 #include <string> |
| 13 | 13 |
| 14 #include "base/bind.h" | 14 #include "base/bind.h" |
| 15 #include "base/location.h" | 15 #include "base/location.h" |
| 16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
| 17 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
| 18 #include "base/task_runner.h" | 18 #include "base/task_runner.h" |
| 19 #include "base/threading/worker_pool.h" | 19 #include "base/threading/worker_pool.h" |
| 20 #include "base/time/time.h" | 20 #include "base/time/time.h" |
| 21 #include "chromeos/cert_loader.h" | 21 #include "chromeos/cert_loader.h" |
| 22 #include "chromeos/dbus/dbus_thread_manager.h" | 22 #include "chromeos/dbus/dbus_thread_manager.h" |
| 23 #include "chromeos/dbus/shill_service_client.h" | 23 #include "chromeos/dbus/shill_service_client.h" |
| 24 #include "chromeos/network/certificate_pattern.h" | 24 #include "chromeos/network/certificate_pattern.h" |
| 25 #include "chromeos/network/client_cert_util.h" | 25 #include "chromeos/network/client_cert_util.h" |
| 26 #include "chromeos/network/favorite_state.h" | 26 #include "chromeos/network/favorite_state.h" |
| 27 #include "chromeos/network/managed_network_configuration_handler.h" | 27 #include "chromeos/network/managed_network_configuration_handler.h" |
| 28 #include "chromeos/network/network_state_handler.h" | 28 #include "chromeos/network/network_state_handler.h" |
| 29 #include "chromeos/network/network_ui_data.h" | 29 #include "chromeos/network/network_ui_data.h" |
| 30 #include "chromeos/tpm_token_loader.h" | |
| 30 #include "components/onc/onc_constants.h" | 31 #include "components/onc/onc_constants.h" |
| 31 #include "dbus/object_path.h" | 32 #include "dbus/object_path.h" |
| 32 #include "net/cert/x509_certificate.h" | 33 #include "net/cert/x509_certificate.h" |
| 33 | 34 |
| 34 namespace chromeos { | 35 namespace chromeos { |
| 35 | 36 |
| 36 // Describes a network |network_path| for which a matching certificate |cert_id| | 37 // Describes a network |network_path| for which a matching certificate |cert_id| |
| 37 // was found. | 38 // was found. |
| 38 struct ClientCertResolver::NetworkAndMatchingCert { | 39 struct ClientCertResolver::NetworkAndMatchingCert { |
| 39 NetworkAndMatchingCert(const std::string& network_path, | 40 NetworkAndMatchingCert(const std::string& network_path, |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 network_handler::ErrorCallback(), | 248 network_handler::ErrorCallback(), |
| 248 dbus_error_name, | 249 dbus_error_name, |
| 249 dbus_error_message); | 250 dbus_error_message); |
| 250 } | 251 } |
| 251 | 252 |
| 252 bool ClientCertificatesLoaded() { | 253 bool ClientCertificatesLoaded() { |
| 253 if (!CertLoader::Get()->certificates_loaded()) { | 254 if (!CertLoader::Get()->certificates_loaded()) { |
| 254 VLOG(1) << "Certificates not loaded yet."; | 255 VLOG(1) << "Certificates not loaded yet."; |
| 255 return false; | 256 return false; |
| 256 } | 257 } |
| 257 if (!CertLoader::Get()->IsHardwareBacked()) { | 258 if (!CertLoader::Get()->is_hardware_backed()) { |
| 258 VLOG(1) << "TPM is not available."; | 259 VLOG(1) << "TPM is not available."; |
| 259 return false; | 260 return false; |
| 260 } | 261 } |
| 261 return true; | 262 return true; |
| 262 } | 263 } |
| 263 | 264 |
| 264 } // namespace | 265 } // namespace |
| 265 | 266 |
| 266 ClientCertResolver::ClientCertResolver() | 267 ClientCertResolver::ClientCertResolver() |
| 267 : network_state_handler_(NULL), | 268 : network_state_handler_(NULL), |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 426 base::Bind(&ClientCertResolver::ConfigureCertificates, | 427 base::Bind(&ClientCertResolver::ConfigureCertificates, |
| 427 weak_ptr_factory_.GetWeakPtr(), | 428 weak_ptr_factory_.GetWeakPtr(), |
| 428 base::Owned(matches))); | 429 base::Owned(matches))); |
| 429 } | 430 } |
| 430 | 431 |
| 431 void ClientCertResolver::ConfigureCertificates(NetworkCertMatches* matches) { | 432 void ClientCertResolver::ConfigureCertificates(NetworkCertMatches* matches) { |
| 432 for (NetworkCertMatches::const_iterator it = matches->begin(); | 433 for (NetworkCertMatches::const_iterator it = matches->begin(); |
| 433 it != matches->end(); ++it) { | 434 it != matches->end(); ++it) { |
| 434 VLOG(1) << "Configuring certificate of network " << it->service_path; | 435 VLOG(1) << "Configuring certificate of network " << it->service_path; |
| 435 CertLoader* cert_loader = CertLoader::Get(); | 436 CertLoader* cert_loader = CertLoader::Get(); |
| 437 std::string tpm_user_pin; | |
| 438 if (TPMTokenLoader::IsInitialized()) | |
|
stevenjb
2014/01/23 18:17:42
This should always be true, shouldn't it? CertLoad
tbarzic
2014/01/23 19:18:37
It could have happened in tests (but started using
| |
| 439 tpm_user_pin = TPMTokenLoader::Get()->tpm_user_pin(); | |
| 440 | |
| 436 base::DictionaryValue shill_properties; | 441 base::DictionaryValue shill_properties; |
| 437 client_cert::SetShillProperties( | 442 client_cert::SetShillProperties( |
| 438 it->cert_config_type, | 443 it->cert_config_type, |
| 439 base::IntToString(cert_loader->tpm_token_slot_id()), | 444 base::IntToString(cert_loader->tpm_token_slot_id()), |
| 440 cert_loader->tpm_user_pin(), | 445 tpm_user_pin, |
| 441 &it->pkcs11_id, | 446 &it->pkcs11_id, |
| 442 &shill_properties); | 447 &shill_properties); |
| 443 DBusThreadManager::Get()->GetShillServiceClient()-> | 448 DBusThreadManager::Get()->GetShillServiceClient()-> |
| 444 SetProperties(dbus::ObjectPath(it->service_path), | 449 SetProperties(dbus::ObjectPath(it->service_path), |
| 445 shill_properties, | 450 shill_properties, |
| 446 base::Bind(&base::DoNothing), | 451 base::Bind(&base::DoNothing), |
| 447 base::Bind(&LogError, it->service_path)); | 452 base::Bind(&LogError, it->service_path)); |
| 448 network_state_handler_->RequestUpdateForNetwork(it->service_path); | 453 network_state_handler_->RequestUpdateForNetwork(it->service_path); |
| 449 } | 454 } |
| 450 } | 455 } |
| 451 | 456 |
| 452 } // namespace chromeos | 457 } // namespace chromeos |
| OLD | NEW |