Chromium Code Reviews| Index: net/cert/test_root_certs_mac.cc |
| diff --git a/net/cert/test_root_certs_mac.cc b/net/cert/test_root_certs_mac.cc |
| index 2728248d6dc7aceb3d981dbc0a0b414c6e8bd4e6..da27f541995e448738a982fd71caf6dc398be9b9 100644 |
| --- a/net/cert/test_root_certs_mac.cc |
| +++ b/net/cert/test_root_certs_mac.cc |
| @@ -77,12 +77,18 @@ OSStatus TestRootCerts::FixupSecTrustRef(SecTrustRef trust_ref) const { |
| temporary_roots_); |
| if (status) |
| return status; |
| - // Trust system store in addition to trusting |temporary_roots_|. |
| - return SecTrustSetAnchorCertificatesOnly(trust_ref, false); |
| + return SecTrustSetAnchorCertificatesOnly(trust_ref, !allow_system_trust_); |
| } |
| - // For OS X 10.6, emulate the functionality by copying the system roots |
| - // in addition to |temporary_roots_|. |
| + if (!allow_system_trust_) { |
| + // Avoid any copying if system roots are not to be trusted. This acts as |
| + // an exclusive list on 10.6, replacing the built-ins. |
| + return SecTrustSetAnchorCertificates(trust_ref, temporary_roots_); |
| + } |
| + |
| + // Otherwise, both system trust and temporary_roots_ must be trusted. Do so |
| + // by emulating the functionality of SecTrustSetAnchorCertificatesOnly by |
| + // creating a copy of the system roots and merging with temporary_roots_. |
|
wtc
2013/05/01 00:53:26
Nit: change "Do so by emulating" to "Emulate"?
Us
|
| CFArrayRef system_roots = NULL; |
| OSStatus status = SecTrustCopyAnchorCertificates(&system_roots); |
| if (status) |
| @@ -96,11 +102,16 @@ OSStatus TestRootCerts::FixupSecTrustRef(SecTrustRef trust_ref) const { |
| return SecTrustSetAnchorCertificates(trust_ref, scoped_roots); |
| } |
| +void TestRootCerts::SetAllowSystemTrust(bool allow_system_trust) { |
| + allow_system_trust_ = allow_system_trust; |
| +} |
| + |
| TestRootCerts::~TestRootCerts() {} |
| void TestRootCerts::Init() { |
| temporary_roots_.reset(CFArrayCreateMutable(kCFAllocatorDefault, 0, |
| &kCertArrayCallbacks)); |
| + allow_system_trust_ = true; |
| } |
| } // namespace net |