Juan Lang : wintrust: Implement GenericChainCertificateTrust.

Alexandre Julliard julliard at winehq.org
Tue Oct 9 13:37:49 CDT 2007


Module: wine
Branch: master
Commit: d1fcdea034168bfb25dd595638a1c50114edba3d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d1fcdea034168bfb25dd595638a1c50114edba3d

Author: Juan Lang <juan.lang at gmail.com>
Date:   Mon Oct  8 15:40:22 2007 -0700

wintrust: Implement GenericChainCertificateTrust.

---

 dlls/wintrust/softpub.c     |   52 +++++++++++++++++++++++++++++++++++++++++++
 dlls/wintrust/wintrust.spec |    2 +-
 2 files changed, 53 insertions(+), 1 deletions(-)

diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index bbbd227..5770244 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -660,6 +660,58 @@ HRESULT WINAPI WintrustCertificateTrust(CRYPT_PROVIDER_DATA *data)
     return ret ? S_OK : S_FALSE;
 }
 
+HRESULT WINAPI GenericChainCertificateTrust(CRYPT_PROVIDER_DATA *data)
+{
+    BOOL ret;
+    WTD_GENERIC_CHAIN_POLICY_DATA *policyData =
+     (WTD_GENERIC_CHAIN_POLICY_DATA *)data->pWintrustData->pPolicyCallbackData;
+
+    TRACE("(%p)\n", data);
+
+    if (policyData && policyData->u.cbSize !=
+     sizeof(WTD_GENERIC_CHAIN_POLICY_CREATE_INFO))
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        ret = FALSE;
+        goto end;
+    }
+    if (!data->csSigners)
+    {
+        ret = FALSE;
+        SetLastError(TRUST_E_NOSIGNATURE);
+    }
+    else
+    {
+        DWORD i;
+        WTD_GENERIC_CHAIN_POLICY_CREATE_INFO createInfo, *pCreateInfo;
+        CERT_CHAIN_PARA chainPara, *pChainPara;
+
+        if (policyData)
+        {
+            pCreateInfo = policyData->pSignerChainInfo;
+            pChainPara = pCreateInfo->pChainPara;
+        }
+        else
+        {
+            WINTRUST_CreateChainPolicyCreateInfo(data, &createInfo, &chainPara);
+            pChainPara = &chainPara;
+            pCreateInfo = &createInfo;
+        }
+        ret = TRUE;
+        for (i = 0; i < data->csSigners; i++)
+            ret = WINTRUST_CreateChainForSigner(data, i, pCreateInfo,
+             pChainPara);
+    }
+
+end:
+    if (!ret)
+        data->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_CERTPROV] =
+         GetLastError();
+    TRACE("returning %d (%08x)\n", ret ? S_OK : S_FALSE,
+     data->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_CERTPROV]);
+    return ret ? S_OK : S_FALSE;
+}
+
 HRESULT WINAPI SoftpubAuthenticode(CRYPT_PROVIDER_DATA *data)
 {
     BOOL ret;
diff --git a/dlls/wintrust/wintrust.spec b/dlls/wintrust/wintrust.spec
index bcac267..a5ee3d0 100644
--- a/dlls/wintrust/wintrust.spec
+++ b/dlls/wintrust/wintrust.spec
@@ -46,7 +46,7 @@
 @ stub DriverFinalPolicy
 @ stub DriverInitializePolicy
 @ stub FindCertsByIssuer
-@ stub GenericChainCertificateTrust
+@ stdcall GenericChainCertificateTrust(ptr)
 @ stub GenericChainFinalProv
 @ stub HTTPSCertificateTrust
 @ stub HTTPSFinalProv




More information about the wine-cvs mailing list