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

Side by Side Diff: crypto/nss_util.cc

Issue 2046863002: Remove traces of USE_NSS_CERTS from crypto/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
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 "crypto/nss_util.h" 5 #include "crypto/nss_util.h"
6 6
7 #include <nss.h> 7 #include <nss.h>
8 #include <pk11pub.h> 8 #include <pk11pub.h>
9 #include <plarena.h> 9 #include <plarena.h>
10 #include <prerror.h> 10 #include <prerror.h>
(...skipping 26 matching lines...) Expand all
37 #include "base/environment.h" 37 #include "base/environment.h"
38 #include "base/files/file_path.h" 38 #include "base/files/file_path.h"
39 #include "base/files/file_util.h" 39 #include "base/files/file_util.h"
40 #include "base/lazy_instance.h" 40 #include "base/lazy_instance.h"
41 #include "base/logging.h" 41 #include "base/logging.h"
42 #include "base/message_loop/message_loop.h" 42 #include "base/message_loop/message_loop.h"
43 #include "base/native_library.h" 43 #include "base/native_library.h"
44 #include "base/path_service.h" 44 #include "base/path_service.h"
45 #include "base/stl_util.h" 45 #include "base/stl_util.h"
46 #include "base/strings/stringprintf.h" 46 #include "base/strings/stringprintf.h"
47 #include "base/synchronization/lock.h"
47 #include "base/threading/thread_checker.h" 48 #include "base/threading/thread_checker.h"
48 #include "base/threading/thread_restrictions.h" 49 #include "base/threading/thread_restrictions.h"
49 #include "base/threading/worker_pool.h" 50 #include "base/threading/worker_pool.h"
50 #include "build/build_config.h" 51 #include "build/build_config.h"
51
52 // USE_NSS_CERTS means NSS is used for certificates and platform integration.
53 // This requires additional support to manage the platform certificate and key
54 // stores.
55 #if defined(USE_NSS_CERTS)
56 #include "base/synchronization/lock.h"
57 #include "crypto/nss_crypto_module_delegate.h" 52 #include "crypto/nss_crypto_module_delegate.h"
58 #endif // defined(USE_NSS_CERTS)
59 53
60 namespace crypto { 54 namespace crypto {
61 55
62 namespace { 56 namespace {
63 57
64 #if defined(OS_CHROMEOS) 58 #if defined(OS_CHROMEOS)
65 const char kUserNSSDatabaseName[] = "UserNSSDB"; 59 const char kUserNSSDatabaseName[] = "UserNSSDB";
66 60
67 // Constants for loading the Chrome OS TPM-backed PKCS #11 library. 61 // Constants for loading the Chrome OS TPM-backed PKCS #11 library.
68 const char kChapsModuleName[] = "Chaps"; 62 const char kChapsModuleName[] = "Chaps";
69 const char kChapsPath[] = "libchaps.so"; 63 const char kChapsPath[] = "libchaps.so";
70 64
71 // Fake certificate authority database used for testing. 65 // Fake certificate authority database used for testing.
72 static const base::FilePath::CharType kReadOnlyCertDB[] = 66 static const base::FilePath::CharType kReadOnlyCertDB[] =
73 FILE_PATH_LITERAL("/etc/fake_root_ca/nssdb"); 67 FILE_PATH_LITERAL("/etc/fake_root_ca/nssdb");
74 #endif // defined(OS_CHROMEOS) 68 #endif // defined(OS_CHROMEOS)
75 69
76 std::string GetNSSErrorMessage() { 70 std::string GetNSSErrorMessage() {
77 std::string result; 71 std::string result;
78 if (PR_GetErrorTextLength()) { 72 if (PR_GetErrorTextLength()) {
79 std::unique_ptr<char[]> error_text(new char[PR_GetErrorTextLength() + 1]); 73 std::unique_ptr<char[]> error_text(new char[PR_GetErrorTextLength() + 1]);
80 PRInt32 copied = PR_GetErrorText(error_text.get()); 74 PRInt32 copied = PR_GetErrorText(error_text.get());
81 result = std::string(error_text.get(), copied); 75 result = std::string(error_text.get(), copied);
82 } else { 76 } else {
83 result = base::StringPrintf("NSS error code: %d", PR_GetError()); 77 result = base::StringPrintf("NSS error code: %d", PR_GetError());
84 } 78 }
85 return result; 79 return result;
86 } 80 }
87 81
88 #if defined(USE_NSS_CERTS)
89 #if !defined(OS_CHROMEOS) 82 #if !defined(OS_CHROMEOS)
90 base::FilePath GetDefaultConfigDirectory() { 83 base::FilePath GetDefaultConfigDirectory() {
91 base::FilePath dir; 84 base::FilePath dir;
92 PathService::Get(base::DIR_HOME, &dir); 85 PathService::Get(base::DIR_HOME, &dir);
93 if (dir.empty()) { 86 if (dir.empty()) {
94 LOG(ERROR) << "Failed to get home directory."; 87 LOG(ERROR) << "Failed to get home directory.";
95 return dir; 88 return dir;
96 } 89 }
97 dir = dir.AppendASCII(".pki").AppendASCII("nssdb"); 90 dir = dir.AppendASCII(".pki").AppendASCII("nssdb");
98 if (!base::CreateDirectory(dir)) { 91 if (!base::CreateDirectory(dir)) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 return NULL; 133 return NULL;
141 } 134 }
142 135
143 // NSS creates a local cache of the sqlite database if it detects that the 136 // NSS creates a local cache of the sqlite database if it detects that the
144 // filesystem the database is on is much slower than the local disk. The 137 // filesystem the database is on is much slower than the local disk. The
145 // detection doesn't work with the latest versions of sqlite, such as 3.6.22 138 // detection doesn't work with the latest versions of sqlite, such as 3.6.22
146 // (NSS bug https://bugzilla.mozilla.org/show_bug.cgi?id=578561). So we set 139 // (NSS bug https://bugzilla.mozilla.org/show_bug.cgi?id=578561). So we set
147 // the NSS environment variable NSS_SDB_USE_CACHE to "yes" to override NSS's 140 // the NSS environment variable NSS_SDB_USE_CACHE to "yes" to override NSS's
148 // detection when database_dir is on NFS. See http://crbug.com/48585. 141 // detection when database_dir is on NFS. See http://crbug.com/48585.
149 // 142 //
150 // TODO(wtc): port this function to other USE_NSS_CERTS platforms. It is
151 // defined only for OS_LINUX and OS_OPENBSD simply because the statfs structure
152 // is OS-specific.
153 //
154 // Because this function sets an environment variable it must be run before we 143 // Because this function sets an environment variable it must be run before we
155 // go multi-threaded. 144 // go multi-threaded.
156 void UseLocalCacheOfNSSDatabaseIfNFS(const base::FilePath& database_dir) { 145 void UseLocalCacheOfNSSDatabaseIfNFS(const base::FilePath& database_dir) {
157 bool db_on_nfs = false; 146 bool db_on_nfs = false;
158 #if defined(OS_LINUX) 147 #if defined(OS_LINUX)
159 base::FileSystemType fs_type = base::FILE_SYSTEM_UNKNOWN; 148 base::FileSystemType fs_type = base::FILE_SYSTEM_UNKNOWN;
160 if (base::GetFileSystemType(database_dir, &fs_type)) 149 if (base::GetFileSystemType(database_dir, &fs_type))
161 db_on_nfs = (fs_type == base::FILE_SYSTEM_NFS); 150 db_on_nfs = (fs_type == base::FILE_SYSTEM_NFS);
162 #elif defined(OS_OPENBSD) 151 #elif defined(OS_OPENBSD)
163 struct statfs buf; 152 struct statfs buf;
164 if (statfs(database_dir.value().c_str(), &buf) == 0) 153 if (statfs(database_dir.value().c_str(), &buf) == 0)
165 db_on_nfs = (strcmp(buf.f_fstypename, MOUNT_NFS) == 0); 154 db_on_nfs = (strcmp(buf.f_fstypename, MOUNT_NFS) == 0);
166 #else 155 #else
167 NOTIMPLEMENTED(); 156 NOTIMPLEMENTED();
168 #endif 157 #endif
169 158
170 if (db_on_nfs) { 159 if (db_on_nfs) {
171 std::unique_ptr<base::Environment> env(base::Environment::Create()); 160 std::unique_ptr<base::Environment> env(base::Environment::Create());
172 static const char kUseCacheEnvVar[] = "NSS_SDB_USE_CACHE"; 161 static const char kUseCacheEnvVar[] = "NSS_SDB_USE_CACHE";
173 if (!env->HasVar(kUseCacheEnvVar)) 162 if (!env->HasVar(kUseCacheEnvVar))
174 env->SetVar(kUseCacheEnvVar, "yes"); 163 env->SetVar(kUseCacheEnvVar, "yes");
175 } 164 }
176 } 165 }
177 166
178 #endif // defined(USE_NSS_CERTS)
179
180 // A singleton to initialize/deinitialize NSPR. 167 // A singleton to initialize/deinitialize NSPR.
181 // Separate from the NSS singleton because we initialize NSPR on the UI thread. 168 // Separate from the NSS singleton because we initialize NSPR on the UI thread.
182 // Now that we're leaking the singleton, we could merge back with the NSS 169 // Now that we're leaking the singleton, we could merge back with the NSS
183 // singleton. 170 // singleton.
184 class NSPRInitSingleton { 171 class NSPRInitSingleton {
185 private: 172 private:
186 friend struct base::DefaultLazyInstanceTraits<NSPRInitSingleton>; 173 friend struct base::DefaultLazyInstanceTraits<NSPRInitSingleton>;
187 174
188 NSPRInitSingleton() { 175 NSPRInitSingleton() {
189 PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0); 176 PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 base::Bind(&NSSInitSingleton::GetSystemNSSKeySlotCallback, 650 base::Bind(&NSSInitSingleton::GetSystemNSSKeySlotCallback,
664 base::Unretained(this) /* singleton is leaky */, 651 base::Unretained(this) /* singleton is leaky */,
665 callback); 652 callback);
666 } 653 }
667 if (IsTPMTokenReady(wrapped_callback)) 654 if (IsTPMTokenReady(wrapped_callback))
668 return ScopedPK11Slot(PK11_ReferenceSlot(tpm_slot_.get())); 655 return ScopedPK11Slot(PK11_ReferenceSlot(tpm_slot_.get()));
669 return ScopedPK11Slot(); 656 return ScopedPK11Slot();
670 } 657 }
671 #endif 658 #endif
672 659
673 #if defined(USE_NSS_CERTS)
674 base::Lock* write_lock() { 660 base::Lock* write_lock() {
675 return &write_lock_; 661 return &write_lock_;
676 } 662 }
677 #endif // defined(USE_NSS_CERTS)
678 663
679 private: 664 private:
680 friend struct base::DefaultLazyInstanceTraits<NSSInitSingleton>; 665 friend struct base::DefaultLazyInstanceTraits<NSSInitSingleton>;
681 666
682 NSSInitSingleton() 667 NSSInitSingleton()
683 : tpm_token_enabled_for_nss_(false), 668 : tpm_token_enabled_for_nss_(false),
684 initializing_tpm_token_(false), 669 initializing_tpm_token_(false),
685 chaps_module_(NULL), 670 chaps_module_(NULL),
686 root_(NULL) { 671 root_(NULL) {
687 // It's safe to construct on any thread, since LazyInstance will prevent any 672 // It's safe to construct on any thread, since LazyInstance will prevent any
(...skipping 11 matching lines...) Expand all
699 // Also check the run-time NSS version. 684 // Also check the run-time NSS version.
700 // NSS_VersionCheck is a >= check, not strict equality. 685 // NSS_VersionCheck is a >= check, not strict equality.
701 if (!NSS_VersionCheck("3.14.3")) { 686 if (!NSS_VersionCheck("3.14.3")) {
702 LOG(FATAL) << "NSS_VersionCheck(\"3.14.3\") failed. NSS >= 3.14.3 is " 687 LOG(FATAL) << "NSS_VersionCheck(\"3.14.3\") failed. NSS >= 3.14.3 is "
703 "required. Please upgrade to the latest NSS, and if you " 688 "required. Please upgrade to the latest NSS, and if you "
704 "still get this error, contact your distribution " 689 "still get this error, contact your distribution "
705 "maintainer."; 690 "maintainer.";
706 } 691 }
707 692
708 SECStatus status = SECFailure; 693 SECStatus status = SECFailure;
709 bool nodb_init = false; 694 base::FilePath database_dir = GetInitialConfigDirectory();
695 if (!database_dir.empty()) {
696 // This duplicates the work which should have been done in
697 // EarlySetupForNSSInit. However, this function is idempotent so
698 // there's no harm done.
699 UseLocalCacheOfNSSDatabaseIfNFS(database_dir);
710 700
711 #if !defined(USE_NSS_CERTS) 701 // Initialize with a persistent database (likely, ~/.pki/nssdb).
712 // Use the system certificate store, so initialize NSS without database. 702 // Use "sql:" which can be shared by multiple processes safely.
713 nodb_init = true; 703 std::string nss_config_dir =
704 base::StringPrintf("sql:%s", database_dir.value().c_str());
705 #if defined(OS_CHROMEOS)
706 status = NSS_Init(nss_config_dir.c_str());
707 #else
708 status = NSS_InitReadWrite(nss_config_dir.c_str());
714 #endif 709 #endif
715 710 if (status != SECSuccess) {
716 if (nodb_init) { 711 LOG(ERROR) << "Error initializing NSS with a persistent "
712 "database (" << nss_config_dir
713 << "): " << GetNSSErrorMessage();
714 }
715 }
716 if (status != SECSuccess) {
717 VLOG(1) << "Initializing NSS without a persistent database.";
717 status = NSS_NoDB_Init(NULL); 718 status = NSS_NoDB_Init(NULL);
718 if (status != SECSuccess) { 719 if (status != SECSuccess) {
719 CrashOnNSSInitFailure(); 720 CrashOnNSSInitFailure();
720 return; 721 return;
721 } 722 }
722 #if defined(OS_IOS) 723 }
723 root_ = InitDefaultRootCerts();
724 #endif // defined(OS_IOS)
725 } else {
726 #if defined(USE_NSS_CERTS)
727 base::FilePath database_dir = GetInitialConfigDirectory();
728 if (!database_dir.empty()) {
729 // This duplicates the work which should have been done in
730 // EarlySetupForNSSInit. However, this function is idempotent so
731 // there's no harm done.
732 UseLocalCacheOfNSSDatabaseIfNFS(database_dir);
733 724
734 // Initialize with a persistent database (likely, ~/.pki/nssdb). 725 PK11_SetPasswordFunc(PKCS11PasswordFunc);
735 // Use "sql:" which can be shared by multiple processes safely.
736 std::string nss_config_dir =
737 base::StringPrintf("sql:%s", database_dir.value().c_str());
738 #if defined(OS_CHROMEOS)
739 status = NSS_Init(nss_config_dir.c_str());
740 #else
741 status = NSS_InitReadWrite(nss_config_dir.c_str());
742 #endif
743 if (status != SECSuccess) {
744 LOG(ERROR) << "Error initializing NSS with a persistent "
745 "database (" << nss_config_dir
746 << "): " << GetNSSErrorMessage();
747 }
748 }
749 if (status != SECSuccess) {
750 VLOG(1) << "Initializing NSS without a persistent database.";
751 status = NSS_NoDB_Init(NULL);
752 if (status != SECSuccess) {
753 CrashOnNSSInitFailure();
754 return;
755 }
756 }
757 726
758 PK11_SetPasswordFunc(PKCS11PasswordFunc); 727 // If we haven't initialized the password for the NSS databases,
728 // initialize an empty-string password so that we don't need to
729 // log in.
730 PK11SlotInfo* slot = PK11_GetInternalKeySlot();
731 if (slot) {
732 // PK11_InitPin may write to the keyDB, but no other thread can use NSS
733 // yet, so we don't need to lock.
734 if (PK11_NeedUserInit(slot))
735 PK11_InitPin(slot, NULL, NULL);
736 PK11_FreeSlot(slot);
737 }
759 738
760 // If we haven't initialized the password for the NSS databases, 739 root_ = InitDefaultRootCerts();
761 // initialize an empty-string password so that we don't need to
762 // log in.
763 PK11SlotInfo* slot = PK11_GetInternalKeySlot();
764 if (slot) {
765 // PK11_InitPin may write to the keyDB, but no other thread can use NSS
766 // yet, so we don't need to lock.
767 if (PK11_NeedUserInit(slot))
768 PK11_InitPin(slot, NULL, NULL);
769 PK11_FreeSlot(slot);
770 }
771
772 root_ = InitDefaultRootCerts();
773 #endif // defined(USE_NSS_CERTS)
774 }
775 740
776 // Disable MD5 certificate signatures. (They are disabled by default in 741 // Disable MD5 certificate signatures. (They are disabled by default in
777 // NSS 3.14.) 742 // NSS 3.14.)
778 NSS_SetAlgorithmPolicy(SEC_OID_MD5, 0, NSS_USE_ALG_IN_CERT_SIGNATURE); 743 NSS_SetAlgorithmPolicy(SEC_OID_MD5, 0, NSS_USE_ALG_IN_CERT_SIGNATURE);
779 NSS_SetAlgorithmPolicy(SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION, 744 NSS_SetAlgorithmPolicy(SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION,
780 0, NSS_USE_ALG_IN_CERT_SIGNATURE); 745 0, NSS_USE_ALG_IN_CERT_SIGNATURE);
781 } 746 }
782 747
783 // NOTE(willchan): We don't actually execute this code since we leak NSS to 748 // NOTE(willchan): We don't actually execute this code since we leak NSS to
784 // prevent non-joinable threads from using NSS after it's already been shut 749 // prevent non-joinable threads from using NSS after it's already been shut
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 typedef std::vector<base::Closure> TPMReadyCallbackList; 817 typedef std::vector<base::Closure> TPMReadyCallbackList;
853 TPMReadyCallbackList tpm_ready_callback_list_; 818 TPMReadyCallbackList tpm_ready_callback_list_;
854 SECMODModule* chaps_module_; 819 SECMODModule* chaps_module_;
855 crypto::ScopedPK11Slot tpm_slot_; 820 crypto::ScopedPK11Slot tpm_slot_;
856 SECMODModule* root_; 821 SECMODModule* root_;
857 #if defined(OS_CHROMEOS) 822 #if defined(OS_CHROMEOS)
858 typedef std::map<std::string, ChromeOSUserData*> ChromeOSUserMap; 823 typedef std::map<std::string, ChromeOSUserData*> ChromeOSUserMap;
859 ChromeOSUserMap chromeos_user_map_; 824 ChromeOSUserMap chromeos_user_map_;
860 ScopedPK11Slot test_system_slot_; 825 ScopedPK11Slot test_system_slot_;
861 #endif 826 #endif
862 #if defined(USE_NSS_CERTS)
863 // TODO(davidben): When https://bugzilla.mozilla.org/show_bug.cgi?id=564011 827 // TODO(davidben): When https://bugzilla.mozilla.org/show_bug.cgi?id=564011
864 // is fixed, we will no longer need the lock. 828 // is fixed, we will no longer need the lock.
865 base::Lock write_lock_; 829 base::Lock write_lock_;
866 #endif // defined(USE_NSS_CERTS)
867 830
868 base::ThreadChecker thread_checker_; 831 base::ThreadChecker thread_checker_;
869 }; 832 };
870 833
871 base::LazyInstance<NSSInitSingleton>::Leaky 834 base::LazyInstance<NSSInitSingleton>::Leaky
872 g_nss_singleton = LAZY_INSTANCE_INITIALIZER; 835 g_nss_singleton = LAZY_INSTANCE_INITIALIZER;
873 } // namespace 836 } // namespace
874 837
875 #if defined(USE_NSS_CERTS)
876 ScopedPK11Slot OpenSoftwareNSSDB(const base::FilePath& path, 838 ScopedPK11Slot OpenSoftwareNSSDB(const base::FilePath& path,
877 const std::string& description) { 839 const std::string& description) {
878 const std::string modspec = 840 const std::string modspec =
879 base::StringPrintf("configDir='sql:%s' tokenDescription='%s'", 841 base::StringPrintf("configDir='sql:%s' tokenDescription='%s'",
880 path.value().c_str(), 842 path.value().c_str(),
881 description.c_str()); 843 description.c_str());
882 PK11SlotInfo* db_slot = SECMOD_OpenUserDB(modspec.c_str()); 844 PK11SlotInfo* db_slot = SECMOD_OpenUserDB(modspec.c_str());
883 if (db_slot) { 845 if (db_slot) {
884 if (PK11_NeedUserInit(db_slot)) 846 if (PK11_NeedUserInit(db_slot))
885 PK11_InitPin(db_slot, NULL, NULL); 847 PK11_InitPin(db_slot, NULL, NULL);
886 } else { 848 } else {
887 LOG(ERROR) << "Error opening persistent database (" << modspec 849 LOG(ERROR) << "Error opening persistent database (" << modspec
888 << "): " << GetNSSErrorMessage(); 850 << "): " << GetNSSErrorMessage();
889 } 851 }
890 return ScopedPK11Slot(db_slot); 852 return ScopedPK11Slot(db_slot);
891 } 853 }
892 854
893 void EarlySetupForNSSInit() { 855 void EarlySetupForNSSInit() {
894 base::FilePath database_dir = GetInitialConfigDirectory(); 856 base::FilePath database_dir = GetInitialConfigDirectory();
895 if (!database_dir.empty()) 857 if (!database_dir.empty())
896 UseLocalCacheOfNSSDatabaseIfNFS(database_dir); 858 UseLocalCacheOfNSSDatabaseIfNFS(database_dir);
897 } 859 }
898 #endif
899 860
900 void EnsureNSPRInit() { 861 void EnsureNSPRInit() {
901 g_nspr_singleton.Get(); 862 g_nspr_singleton.Get();
902 } 863 }
903 864
904 void EnsureNSSInit() { 865 void EnsureNSSInit() {
905 // Initializing SSL causes us to do blocking IO. 866 // Initializing SSL causes us to do blocking IO.
906 // Temporarily allow it until we fix 867 // Temporarily allow it until we fix
907 // http://code.google.com/p/chromium/issues/detail?id=59847 868 // http://code.google.com/p/chromium/issues/detail?id=59847
908 base::ThreadRestrictions::ScopedAllowIO allow_io; 869 base::ThreadRestrictions::ScopedAllowIO allow_io;
909 g_nss_singleton.Get(); 870 g_nss_singleton.Get();
910 } 871 }
911 872
912 bool CheckNSSVersion(const char* version) { 873 bool CheckNSSVersion(const char* version) {
913 return !!NSS_VersionCheck(version); 874 return !!NSS_VersionCheck(version);
914 } 875 }
915 876
916 #if defined(USE_NSS_CERTS)
917 base::Lock* GetNSSWriteLock() { 877 base::Lock* GetNSSWriteLock() {
918 return g_nss_singleton.Get().write_lock(); 878 return g_nss_singleton.Get().write_lock();
919 } 879 }
920 880
921 AutoNSSWriteLock::AutoNSSWriteLock() : lock_(GetNSSWriteLock()) { 881 AutoNSSWriteLock::AutoNSSWriteLock() : lock_(GetNSSWriteLock()) {
922 // May be NULL if the lock is not needed in our version of NSS. 882 // May be NULL if the lock is not needed in our version of NSS.
923 if (lock_) 883 if (lock_)
924 lock_->Acquire(); 884 lock_->Acquire();
925 } 885 }
926 886
927 AutoNSSWriteLock::~AutoNSSWriteLock() { 887 AutoNSSWriteLock::~AutoNSSWriteLock() {
928 if (lock_) { 888 if (lock_) {
929 lock_->AssertAcquired(); 889 lock_->AssertAcquired();
930 lock_->Release(); 890 lock_->Release();
931 } 891 }
932 } 892 }
933 893
934 AutoSECMODListReadLock::AutoSECMODListReadLock() 894 AutoSECMODListReadLock::AutoSECMODListReadLock()
935 : lock_(SECMOD_GetDefaultModuleListLock()) { 895 : lock_(SECMOD_GetDefaultModuleListLock()) {
936 SECMOD_GetReadLock(lock_); 896 SECMOD_GetReadLock(lock_);
937 } 897 }
938 898
939 AutoSECMODListReadLock::~AutoSECMODListReadLock() { 899 AutoSECMODListReadLock::~AutoSECMODListReadLock() {
940 SECMOD_ReleaseReadLock(lock_); 900 SECMOD_ReleaseReadLock(lock_);
941 } 901 }
942 #endif // defined(USE_NSS_CERTS)
943 902
944 #if defined(OS_CHROMEOS) 903 #if defined(OS_CHROMEOS)
945 ScopedPK11Slot GetSystemNSSKeySlot( 904 ScopedPK11Slot GetSystemNSSKeySlot(
946 const base::Callback<void(ScopedPK11Slot)>& callback) { 905 const base::Callback<void(ScopedPK11Slot)>& callback) {
947 return g_nss_singleton.Get().GetSystemNSSKeySlot(callback); 906 return g_nss_singleton.Get().GetSystemNSSKeySlot(callback);
948 } 907 }
949 908
950 void SetSystemKeySlotForTesting(ScopedPK11Slot slot) { 909 void SetSystemKeySlotForTesting(ScopedPK11Slot slot) {
951 g_nss_singleton.Get().SetSystemKeySlotForTesting(std::move(slot)); 910 g_nss_singleton.Get().SetSystemKeySlotForTesting(std::move(slot));
952 } 911 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 return time.ToInternalValue() - base::Time::UnixEpoch().ToInternalValue(); 981 return time.ToInternalValue() - base::Time::UnixEpoch().ToInternalValue();
1023 } 982 }
1024 983
1025 #if !defined(OS_CHROMEOS) 984 #if !defined(OS_CHROMEOS)
1026 PK11SlotInfo* GetPersistentNSSKeySlot() { 985 PK11SlotInfo* GetPersistentNSSKeySlot() {
1027 return g_nss_singleton.Get().GetPersistentNSSKeySlot(); 986 return g_nss_singleton.Get().GetPersistentNSSKeySlot();
1028 } 987 }
1029 #endif 988 #endif
1030 989
1031 } // namespace crypto 990 } // namespace crypto
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698