diff options
author | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-05 02:20:44 +0000 |
---|---|---|
committer | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-05 02:20:44 +0000 |
commit | 4c4f7cdb9dfef25e00a3f03f2311f22bacfaef39 (patch) | |
tree | 2e68cf6647aec887b211096bacf576460f96153a /net/base/cert_database_nss.cc | |
parent | b640b41ead7134a508d4228e480409e83cf9ac63 (diff) | |
download | chromium_src-4c4f7cdb9dfef25e00a3f03f2311f22bacfaef39.zip chromium_src-4c4f7cdb9dfef25e00a3f03f2311f22bacfaef39.tar.gz chromium_src-4c4f7cdb9dfef25e00a3f03f2311f22bacfaef39.tar.bz2 |
NSS: Unlock crypto devices when populating cert manager.
BUG=42073
TEST=try to use cert manager with "unfriendly" device.
Review URL: http://codereview.chromium.org/6580058
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77024 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/cert_database_nss.cc')
-rw-r--r-- | net/base/cert_database_nss.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/net/base/cert_database_nss.cc b/net/base/cert_database_nss.cc index db2c47a..7e1abaa9 100644 --- a/net/base/cert_database_nss.cc +++ b/net/base/cert_database_nss.cc @@ -118,6 +118,30 @@ CryptoModule* CertDatabase::GetDefaultModule() const { return module; } +void CertDatabase::ListModules(CryptoModuleList* modules, bool need_rw) const { + modules->clear(); + + PK11SlotList* slot_list = NULL; + // The wincx arg is unused since we don't call PK11_SetIsLoggedInFunc. + slot_list = PK11_GetAllTokens(CKM_INVALID_MECHANISM, + need_rw ? PR_TRUE : PR_FALSE, // needRW + PR_TRUE, // loadCerts (unused) + NULL); // wincx + if (!slot_list) { + LOG(ERROR) << "PK11_GetAllTokens failed: " << PORT_GetError(); + return; + } + + PK11SlotListElement* slot_element = PK11_GetFirstSafe(slot_list); + while (slot_element) { + modules->push_back(CryptoModule::CreateFromHandle(slot_element->slot)); + slot_element = PK11_GetNextSafe(slot_list, slot_element, + PR_FALSE); // restart + } + + PK11_FreeSlotList(slot_list); +} + int CertDatabase::ImportFromPKCS12( net::CryptoModule* module, const std::string& data, |