| 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 "crypto/nss_util.h" | 5 #include "crypto/nss_util.h" |
| 6 #include "crypto/nss_util_internal.h" | 6 #include "crypto/nss_util_internal.h" |
| 7 | 7 |
| 8 #include <nss.h> | 8 #include <nss.h> |
| 9 #include <pk11pub.h> | 9 #include <pk11pub.h> |
| 10 #include <plarena.h> | 10 #include <plarena.h> |
| 11 #include <prerror.h> | 11 #include <prerror.h> |
| 12 #include <prinit.h> | 12 #include <prinit.h> |
| 13 #include <prtime.h> | 13 #include <prtime.h> |
| 14 #include <secmod.h> | 14 #include <secmod.h> |
| 15 | 15 |
| 16 #if defined(OS_LINUX) | 16 #if defined(OS_LINUX) |
| 17 #include <linux/nfs_fs.h> | 17 #include <linux/nfs_fs.h> |
| 18 #include <sys/vfs.h> | 18 #include <sys/vfs.h> |
| 19 #elif defined(OS_OPENBSD) | 19 #elif defined(OS_OPENBSD) |
| 20 #include <sys/mount.h> | 20 #include <sys/mount.h> |
| 21 #include <sys/param.h> | 21 #include <sys/param.h> |
| 22 #endif | 22 #endif |
| 23 | 23 |
| 24 #include <map> | 24 #include <map> |
| 25 #include <vector> | 25 #include <vector> |
| 26 | 26 |
| 27 #include "base/bind.h" |
| 27 #include "base/callback.h" | 28 #include "base/callback.h" |
| 28 #include "base/cpu.h" | 29 #include "base/cpu.h" |
| 29 #include "base/debug/alias.h" | 30 #include "base/debug/alias.h" |
| 30 #include "base/debug/stack_trace.h" | 31 #include "base/debug/stack_trace.h" |
| 31 #include "base/environment.h" | 32 #include "base/environment.h" |
| 32 #include "base/file_util.h" | 33 #include "base/file_util.h" |
| 33 #include "base/files/file_path.h" | 34 #include "base/files/file_path.h" |
| 34 #include "base/lazy_instance.h" | 35 #include "base/lazy_instance.h" |
| 35 #include "base/logging.h" | 36 #include "base/logging.h" |
| 36 #include "base/memory/scoped_ptr.h" | 37 #include "base/memory/scoped_ptr.h" |
| 38 #include "base/message_loop/message_loop.h" |
| 37 #include "base/metrics/histogram.h" | 39 #include "base/metrics/histogram.h" |
| 38 #include "base/native_library.h" | 40 #include "base/native_library.h" |
| 39 #include "base/stl_util.h" | 41 #include "base/stl_util.h" |
| 40 #include "base/strings/stringprintf.h" | 42 #include "base/strings/stringprintf.h" |
| 41 #include "base/threading/thread_checker.h" | 43 #include "base/threading/thread_checker.h" |
| 42 #include "base/threading/thread_restrictions.h" | 44 #include "base/threading/thread_restrictions.h" |
| 43 #include "build/build_config.h" | 45 #include "build/build_config.h" |
| 44 | 46 |
| 45 // USE_NSS means we use NSS for everything crypto-related. If USE_NSS is not | 47 // USE_NSS means we use NSS for everything crypto-related. If USE_NSS is not |
| 46 // defined, such as on Mac and Windows, we use NSS for SSL only -- we don't | 48 // defined, such as on Mac and Windows, we use NSS for SSL only -- we don't |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 DCHECK(thread_checker_.CalledOnValidThread()); | 439 DCHECK(thread_checker_.CalledOnValidThread()); |
| 438 LOG(WARNING) << "using software private slot for " << username_hash; | 440 LOG(WARNING) << "using software private slot for " << username_hash; |
| 439 DCHECK(chromeos_user_map_.find(username_hash) != chromeos_user_map_.end()); | 441 DCHECK(chromeos_user_map_.find(username_hash) != chromeos_user_map_.end()); |
| 440 chromeos_user_map_[username_hash]->SetPrivateSlot( | 442 chromeos_user_map_[username_hash]->SetPrivateSlot( |
| 441 chromeos_user_map_[username_hash]->GetPublicSlot()); | 443 chromeos_user_map_[username_hash]->GetPublicSlot()); |
| 442 } | 444 } |
| 443 | 445 |
| 444 ScopedPK11Slot GetPublicSlotForChromeOSUser( | 446 ScopedPK11Slot GetPublicSlotForChromeOSUser( |
| 445 const std::string& username_hash) { | 447 const std::string& username_hash) { |
| 446 DCHECK(thread_checker_.CalledOnValidThread()); | 448 DCHECK(thread_checker_.CalledOnValidThread()); |
| 449 |
| 450 if (username_hash.empty()) { |
| 451 DVLOG(2) << "empty username_hash"; |
| 452 return ScopedPK11Slot(); |
| 453 } |
| 454 |
| 447 if (test_slot_) { | 455 if (test_slot_) { |
| 448 DVLOG(2) << "returning test_slot_ for " << username_hash; | 456 DVLOG(2) << "returning test_slot_ for " << username_hash; |
| 449 return ScopedPK11Slot(PK11_ReferenceSlot(test_slot_)); | 457 return ScopedPK11Slot(PK11_ReferenceSlot(test_slot_)); |
| 450 } | 458 } |
| 451 | 459 |
| 452 if (chromeos_user_map_.find(username_hash) == chromeos_user_map_.end()) { | 460 if (chromeos_user_map_.find(username_hash) == chromeos_user_map_.end()) { |
| 453 LOG(ERROR) << username_hash << " not initialized."; | 461 LOG(ERROR) << username_hash << " not initialized."; |
| 454 return ScopedPK11Slot(); | 462 return ScopedPK11Slot(); |
| 455 } | 463 } |
| 456 return chromeos_user_map_[username_hash]->GetPublicSlot(); | 464 return chromeos_user_map_[username_hash]->GetPublicSlot(); |
| 457 } | 465 } |
| 458 | 466 |
| 459 ScopedPK11Slot GetPrivateSlotForChromeOSUser( | 467 ScopedPK11Slot GetPrivateSlotForChromeOSUser( |
| 460 const std::string& username_hash, | 468 const std::string& username_hash, |
| 461 const base::Callback<void(ScopedPK11Slot)>& callback) { | 469 const base::Callback<void(ScopedPK11Slot)>& callback) { |
| 462 DCHECK(thread_checker_.CalledOnValidThread()); | 470 DCHECK(thread_checker_.CalledOnValidThread()); |
| 471 |
| 472 if (username_hash.empty()) { |
| 473 DVLOG(2) << "empty username_hash"; |
| 474 if (!callback.is_null()) { |
| 475 base::MessageLoop::current()->PostTask( |
| 476 FROM_HERE, base::Bind(callback, base::Passed(ScopedPK11Slot()))); |
| 477 } |
| 478 return ScopedPK11Slot(); |
| 479 } |
| 480 |
| 463 DCHECK(chromeos_user_map_.find(username_hash) != chromeos_user_map_.end()); | 481 DCHECK(chromeos_user_map_.find(username_hash) != chromeos_user_map_.end()); |
| 464 | 482 |
| 465 if (test_slot_) { | 483 if (test_slot_) { |
| 466 DVLOG(2) << "returning test_slot_ for " << username_hash; | 484 DVLOG(2) << "returning test_slot_ for " << username_hash; |
| 467 return ScopedPK11Slot(PK11_ReferenceSlot(test_slot_)); | 485 return ScopedPK11Slot(PK11_ReferenceSlot(test_slot_)); |
| 468 } | 486 } |
| 469 | 487 |
| 470 return chromeos_user_map_[username_hash]->GetPrivateSlot(callback); | 488 return chromeos_user_map_[username_hash]->GetPrivateSlot(callback); |
| 471 } | 489 } |
| 472 | 490 |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 | 1069 |
| 1052 PK11SlotInfo* GetPublicNSSKeySlot() { | 1070 PK11SlotInfo* GetPublicNSSKeySlot() { |
| 1053 return g_nss_singleton.Get().GetPublicNSSKeySlot(); | 1071 return g_nss_singleton.Get().GetPublicNSSKeySlot(); |
| 1054 } | 1072 } |
| 1055 | 1073 |
| 1056 PK11SlotInfo* GetPrivateNSSKeySlot() { | 1074 PK11SlotInfo* GetPrivateNSSKeySlot() { |
| 1057 return g_nss_singleton.Get().GetPrivateNSSKeySlot(); | 1075 return g_nss_singleton.Get().GetPrivateNSSKeySlot(); |
| 1058 } | 1076 } |
| 1059 | 1077 |
| 1060 } // namespace crypto | 1078 } // namespace crypto |
| OLD | NEW |