summaryrefslogtreecommitdiffstats
path: root/net/base/x509_certificate_mac.cc
diff options
context:
space:
mode:
authorrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-30 08:47:47 +0000
committerrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-30 08:47:47 +0000
commiteb8414e82812f8847a9eb7ab90fd191632ad3e8a (patch)
tree26970431a27bead05c2bbc82ece3a50f78224c74 /net/base/x509_certificate_mac.cc
parentf4f8ed0a5e96e5020b302d66b6866e9ae97b478b (diff)
downloadchromium_src-eb8414e82812f8847a9eb7ab90fd191632ad3e8a.zip
chromium_src-eb8414e82812f8847a9eb7ab90fd191632ad3e8a.tar.gz
chromium_src-eb8414e82812f8847a9eb7ab90fd191632ad3e8a.tar.bz2
Return the constructed certificate chain in X509Certificate::Verify()
BUG=65540 TEST=net_unittests --gtest_filter=X509CertificateTest.VerifyReturn* Review URL: http://codereview.chromium.org/6874039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94832 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/x509_certificate_mac.cc')
-rw-r--r--net/base/x509_certificate_mac.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/net/base/x509_certificate_mac.cc b/net/base/x509_certificate_mac.cc
index 88ff95f..ef69748 100644
--- a/net/base/x509_certificate_mac.cc
+++ b/net/base/x509_certificate_mac.cc
@@ -832,6 +832,23 @@ int X509Certificate::VerifyInternal(const std::string& hostname,
return NetErrorFromOSStatus(status);
ScopedCFTypeRef<CFArrayRef> scoped_completed_chain(completed_chain);
+ SecCertificateRef verified_cert = NULL;
+ std::vector<SecCertificateRef> verified_chain;
+ for (CFIndex i = 0, count = CFArrayGetCount(completed_chain);
+ i < count; ++i) {
+ SecCertificateRef chain_cert = reinterpret_cast<SecCertificateRef>(
+ const_cast<void*>(CFArrayGetValueAtIndex(completed_chain, i)));
+ if (i == 0) {
+ verified_cert = chain_cert;
+ } else {
+ verified_chain.push_back(chain_cert);
+ }
+ }
+ if (verified_cert) {
+ verify_result->verified_cert = CreateFromHandle(verified_cert,
+ verified_chain);
+ }
+
// Evaluate the results
OSStatus cssm_result;
switch (trust_result) {