diff options
author | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-01 22:38:05 +0000 |
---|---|---|
committer | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-01 22:38:05 +0000 |
commit | 295f13906ac3663765b65e5d29b4dbe556b2fd00 (patch) | |
tree | d62e0e8da050c8999e99e4bacbd321d8fc5017d8 /net | |
parent | 397b8ea50bffcc0764ca3ffcf7ec303e0f320fe4 (diff) | |
download | chromium_src-295f13906ac3663765b65e5d29b4dbe556b2fd00.zip chromium_src-295f13906ac3663765b65e5d29b4dbe556b2fd00.tar.gz chromium_src-295f13906ac3663765b65e5d29b4dbe556b2fd00.tar.bz2 |
Add ListCerts method to CertDatabase.
BUG=19991
TEST=CertDatabaseNSSTest.ListCerts
Review URL: http://codereview.chromium.org/3192021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58250 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/base/cert_database.h | 4 | ||||
-rw-r--r-- | net/base/cert_database_nss.cc | 16 | ||||
-rw-r--r-- | net/base/cert_database_nss_unittest.cc | 10 |
3 files changed, 30 insertions, 0 deletions
diff --git a/net/base/cert_database.h b/net/base/cert_database.h index 9570d15..dab72eb 100644 --- a/net/base/cert_database.h +++ b/net/base/cert_database.h @@ -69,6 +69,10 @@ class CertDatabase { int AddUserCert(X509Certificate* cert); #if defined(USE_NSS) + // Get a list of unique certificates in the certificate database. (One + // instance of all certificates.) + void ListCerts(CertificateList* certs); + // Import certificates and private keys from PKCS #12 blob. // Returns OK or a network error code such as ERR_PKCS12_IMPORT_BAD_PASSWORD // or ERR_PKCS12_IMPORT_ERROR. diff --git a/net/base/cert_database_nss.cc b/net/base/cert_database_nss.cc index b8be38c..5ce1389 100644 --- a/net/base/cert_database_nss.cc +++ b/net/base/cert_database_nss.cc @@ -89,6 +89,22 @@ int CertDatabase::AddUserCert(X509Certificate* cert_obj) { return OK; } +void CertDatabase::ListCerts(CertificateList* certs) { + certs->clear(); + + CERTCertList* cert_list = PK11_ListCerts(PK11CertListUnique, NULL); + CERTCertListNode* node; + for (node = CERT_LIST_HEAD(cert_list); + !CERT_LIST_END(node, cert_list); + node = CERT_LIST_NEXT(node)) { + certs->push_back(X509Certificate::CreateFromHandle( + node->cert, + X509Certificate::SOURCE_LONE_CERT_IMPORT, + X509Certificate::OSCertHandles())); + } + CERT_DestroyCertList(cert_list); +} + int CertDatabase::ImportFromPKCS12( const std::string& data, const string16& password) { return psm::nsPKCS12Blob_Import(data.data(), data.size(), password); diff --git a/net/base/cert_database_nss_unittest.cc b/net/base/cert_database_nss_unittest.cc index 45ac72c0..6aa7095 100644 --- a/net/base/cert_database_nss_unittest.cc +++ b/net/base/cert_database_nss_unittest.cc @@ -136,6 +136,16 @@ class CertDatabaseNSSTest : public testing::Test { // static bool CertDatabaseNSSTest::temp_db_initialized_ = false; +TEST_F(CertDatabaseNSSTest, ListCerts) { + // This test isn't terribly useful, though it will at least let valgrind test + // for leaks. + CertificateList certs; + cert_db_.ListCerts(&certs); + // The test DB is empty, but let's assume there will always be something in + // the other slots. + EXPECT_LT(0U, certs.size()); +} + TEST_F(CertDatabaseNSSTest, ImportFromPKCS12WrongPassword) { std::string pkcs12_data = ReadTestFile("client.p12"); |