summaryrefslogtreecommitdiffstats
path: root/net/base/cert_database_nss.cc
diff options
context:
space:
mode:
authormattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-05 02:20:44 +0000
committermattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-05 02:20:44 +0000
commit4c4f7cdb9dfef25e00a3f03f2311f22bacfaef39 (patch)
tree2e68cf6647aec887b211096bacf576460f96153a /net/base/cert_database_nss.cc
parentb640b41ead7134a508d4228e480409e83cf9ac63 (diff)
downloadchromium_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.cc24
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,