Juan Lang : crypt32: Support add disposition CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES.

Alexandre Julliard julliard at winehq.org
Tue Dec 23 13:41:09 CST 2008


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Mon Dec 22 10:55:43 2008 -0800

crypt32: Support add disposition CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES.

---

 dlls/crypt32/ctl.c   |   21 +++++++++++++++++++++
 dlls/crypt32/store.c |   40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/dlls/crypt32/ctl.c b/dlls/crypt32/ctl.c
index ffac667..65691bb 100644
--- a/dlls/crypt32/ctl.c
+++ b/dlls/crypt32/ctl.c
@@ -82,6 +82,27 @@ BOOL WINAPI CertAddCTLContextToStore(HCERTSTORE hCertStore,
         else
             toAdd = CertDuplicateCTLContext(pCtlContext);
         break;
+    case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES:
+        if (existing)
+        {
+            LONG newer = CompareFileTime(&existing->pCtlInfo->ThisUpdate,
+             &pCtlContext->pCtlInfo->ThisUpdate);
+
+            if (newer < 0)
+            {
+                toAdd = CertDuplicateCTLContext(pCtlContext);
+                CtlContext_CopyProperties(existing, pCtlContext);
+            }
+            else
+            {
+                TRACE("existing CTL is newer, not adding\n");
+                SetLastError(CRYPT_E_EXISTS);
+                ret = FALSE;
+            }
+        }
+        else
+            toAdd = CertDuplicateCTLContext(pCtlContext);
+        break;
     case CERT_STORE_ADD_REPLACE_EXISTING:
         toAdd = CertDuplicateCTLContext(pCtlContext);
         break;
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index 1519c96..3b42893 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -893,6 +893,25 @@ BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
         else
             toAdd = CertDuplicateCertificateContext(pCertContext);
         break;
+    case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES:
+        if (existing)
+        {
+            if (CompareFileTime(&existing->pCertInfo->NotBefore,
+             &pCertContext->pCertInfo->NotBefore) >= 0)
+            {
+                TRACE("existing certificate is newer, not adding\n");
+                SetLastError(CRYPT_E_EXISTS);
+                ret = FALSE;
+            }
+            else
+            {
+                toAdd = CertDuplicateCertificateContext(pCertContext);
+                CertContext_CopyProperties(toAdd, existing);
+            }
+        }
+        else
+            toAdd = CertDuplicateCertificateContext(pCertContext);
+        break;
     default:
         FIXME("Unimplemented add disposition %d\n", dwAddDisposition);
         SetLastError(E_INVALIDARG);
@@ -1016,6 +1035,27 @@ BOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore,
         else
             toAdd = CertDuplicateCRLContext(pCrlContext);
         break;
+    case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES:
+        if (existing)
+        {
+            LONG newer = CompareFileTime(&existing->pCrlInfo->ThisUpdate,
+             &pCrlContext->pCrlInfo->ThisUpdate);
+
+            if (newer < 0)
+            {
+                toAdd = CertDuplicateCRLContext(pCrlContext);
+                CrlContext_CopyProperties(toAdd, existing);
+            }
+            else
+            {
+                TRACE("existing CRL is newer, not adding\n");
+                SetLastError(CRYPT_E_EXISTS);
+                ret = FALSE;
+            }
+        }
+        else
+            toAdd = CertDuplicateCRLContext(pCrlContext);
+        break;
     case CERT_STORE_ADD_REPLACE_EXISTING:
         toAdd = CertDuplicateCRLContext(pCrlContext);
         break;




More information about the wine-cvs mailing list