/*
* NSS utility functions
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "net/third_party/mozilla_win/cert/win_util.h"
#include "base/win/wincrypt_shim.h"
#include "crypto/scoped_capi_types.h"
namespace net {
void GatherEnterpriseCertsForLocation(HCERTSTORE cert_store,
DWORD location,
LPCWSTR store_name) {
if (!(location == CERT_SYSTEM_STORE_LOCAL_MACHINE ||
location == CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY ||
location == CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE ||
location == CERT_SYSTEM_STORE_CURRENT_USER ||
location == CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY)) {
return;
}
DWORD flags =
location | CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG;
crypto::ScopedHCERTSTORE enterprise_root_store(CertOpenStore(
CERT_STORE_PROV_SYSTEM_REGISTRY_W, 0, NULL, flags, store_name));
if (!enterprise_root_store.get()) {
return;
}
// Priority of the opened cert store in the collection does not matter, so set
// everything to priority 0.
CertAddStoreToCollection(cert_store, enterprise_root_store.get(),
/*dwUpdateFlags=*/0, /*dwPriority=*/0);
}
} // namespace net