Juan Lang : wintrust: Add a helper function to initialize chain creation parameters.
Alexandre Julliard
julliard at winehq.org
Tue Oct 9 13:37:48 CDT 2007
Module: wine
Branch: master
Commit: 1a88c8bccbc70f8c28a42b2acf3786f4d1af339b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1a88c8bccbc70f8c28a42b2acf3786f4d1af339b
Author: Juan Lang <juan.lang at gmail.com>
Date: Mon Oct 8 15:34:54 2007 -0700
wintrust: Add a helper function to initialize chain creation parameters.
---
dlls/wintrust/softpub.c | 45 +++++++++++++++++++++++++++++----------------
1 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index 87e5209..bd55d84 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -23,6 +23,7 @@
#include "winbase.h"
#include "wintrust.h"
#include "mssip.h"
+#include "softpub.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
@@ -574,6 +575,28 @@ static BOOL WINTRUST_CopyChain(CRYPT_PROVIDER_DATA *data, DWORD signerIdx)
return ret;
}
+static void WINTRUST_CreateChainPolicyCreateInfo(
+ const CRYPT_PROVIDER_DATA *data, PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO info,
+ PCERT_CHAIN_PARA chainPara)
+{
+ chainPara->cbSize = sizeof(CERT_CHAIN_PARA);
+ if (data->pRequestUsage)
+ memcpy(&chainPara->RequestedUsage, data->pRequestUsage,
+ sizeof(CERT_USAGE_MATCH));
+ info->u.cbSize = sizeof(WTD_GENERIC_CHAIN_POLICY_CREATE_INFO);
+ info->hChainEngine = NULL;
+ info->pChainPara = chainPara;
+ if (data->dwProvFlags & CPD_REVOCATION_CHECK_END_CERT)
+ info->dwFlags = CERT_CHAIN_REVOCATION_CHECK_END_CERT;
+ else if (data->dwProvFlags & CPD_REVOCATION_CHECK_CHAIN)
+ info->dwFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN;
+ else if (data->dwProvFlags & CPD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT)
+ info->dwFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT;
+ else
+ info->dwFlags = 0;
+ info->pvReserved = NULL;
+}
+
HRESULT WINAPI WintrustCertificateTrust(CRYPT_PROVIDER_DATA *data)
{
BOOL ret;
@@ -586,35 +609,25 @@ HRESULT WINAPI WintrustCertificateTrust(CRYPT_PROVIDER_DATA *data)
else
{
DWORD i;
+ WTD_GENERIC_CHAIN_POLICY_CREATE_INFO createInfo;
+ CERT_CHAIN_PARA chainPara;
+ WINTRUST_CreateChainPolicyCreateInfo(data, &createInfo, &chainPara);
ret = TRUE;
for (i = 0; i < data->csSigners; i++)
{
- CERT_CHAIN_PARA chainPara = { sizeof(chainPara), { 0 } };
- DWORD flags;
-
- if (data->pRequestUsage)
- memcpy(&chainPara.RequestedUsage, data->pRequestUsage,
- sizeof(CERT_USAGE_MATCH));
- if (data->dwProvFlags & CPD_REVOCATION_CHECK_END_CERT)
- flags = CERT_CHAIN_REVOCATION_CHECK_END_CERT;
- else if (data->dwProvFlags & CPD_REVOCATION_CHECK_CHAIN)
- flags = CERT_CHAIN_REVOCATION_CHECK_CHAIN;
- else if (data->dwProvFlags & CPD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT)
- flags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT;
- else
- flags = 0;
/* Expect the end certificate for each signer to be the only
* cert in the chain:
*/
if (data->pasSigners[i].csCertChain)
{
/* Create a certificate chain for each signer */
- ret = CertGetCertificateChain(NULL,
+ ret = CertGetCertificateChain(createInfo.hChainEngine,
data->pasSigners[i].pasCertChain[0].pCert,
&data->pasSigners[i].sftVerifyAsOf,
data->chStores ? data->pahStores[0] : NULL,
- &chainPara, flags, NULL, &data->pasSigners[i].pChainContext);
+ &chainPara, createInfo.dwFlags, createInfo.pvReserved,
+ &data->pasSigners[i].pChainContext);
if (ret)
{
if (data->pasSigners[i].pChainContext->cChain != 1)
More information about the wine-cvs
mailing list