[CRYPT32] Bring back the code path that had r64026 and r66349 until we adapt our...
authorAmine Khaldi <amine.khaldi@reactos.org>
Wed, 23 Nov 2016 09:22:56 +0000 (09:22 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Wed, 23 Nov 2016 09:22:56 +0000 (09:22 +0000)
svn path=/trunk/; revision=73353

reactos/dll/win32/crypt32/rootstore.c

index 48b072e..02efae7 100644 (file)
@@ -428,6 +428,57 @@ static BOOL import_certs_from_path(LPCSTR path, HCERTSTORE store,
     return ret;
 }
 
+#ifdef __REACTOS__
+
+static BOOL WINAPI CRYPT_RootWriteCert(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT cert, DWORD dwFlags)
+{
+    /* The root store can't have certs added */
+    return FALSE;
+}
+
+static BOOL WINAPI CRYPT_RootDeleteCert(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT cert, DWORD dwFlags)
+{
+    /* The root store can't have certs deleted */
+    return FALSE;
+}
+
+static BOOL WINAPI CRYPT_RootWriteCRL(HCERTSTORE hCertStore,
+ PCCRL_CONTEXT crl, DWORD dwFlags)
+{
+    /* The root store can have CRLs added.  At worst, a malicious application
+     * can DoS itself, as the changes aren't persisted in any way.
+     */
+    return TRUE;
+}
+
+static BOOL WINAPI CRYPT_RootDeleteCRL(HCERTSTORE hCertStore,
+ PCCRL_CONTEXT crl, DWORD dwFlags)
+{
+    /* The root store can't have CRLs deleted */
+    return FALSE;
+}
+
+static void *rootProvFuncs[] = {
+    NULL, /* CERT_STORE_PROV_CLOSE_FUNC */
+    NULL, /* CERT_STORE_PROV_READ_CERT_FUNC */
+    CRYPT_RootWriteCert,
+    CRYPT_RootDeleteCert,
+    NULL, /* CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC */
+    NULL, /* CERT_STORE_PROV_READ_CRL_FUNC */
+    CRYPT_RootWriteCRL,
+    CRYPT_RootDeleteCRL,
+    NULL, /* CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC */
+    NULL, /* CERT_STORE_PROV_READ_CTL_FUNC */
+    NULL, /* CERT_STORE_PROV_WRITE_CTL_FUNC */
+    NULL, /* CERT_STORE_PROV_DELETE_CTL_FUNC */
+    NULL, /* CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC */
+    NULL, /* CERT_STORE_PROV_CONTROL_FUNC */
+};
+
+#endif /* __REACTOS__ */
+
 static const char * const CRYPT_knownLocations[] = {
  "/etc/ssl/certs/ca-certificates.crt",
  "/etc/ssl/certs",
@@ -736,17 +787,48 @@ static void read_trusted_roots_from_known_locations(HCERTSTORE store)
 
 static HCERTSTORE create_root_store(void)
 {
+#ifdef __REACTOS__
+    HCERTSTORE root = NULL;
+#endif
     HCERTSTORE memStore = CertOpenStore(CERT_STORE_PROV_MEMORY,
      X509_ASN_ENCODING, 0, CERT_STORE_CREATE_NEW_FLAG, NULL);
 
     if (memStore)
     {
+#ifdef __REACTOS__
+        HCERTSTORE regStore;
+        CERT_STORE_PROV_INFO provInfo = {
+         sizeof(CERT_STORE_PROV_INFO),
+         sizeof(rootProvFuncs) / sizeof(rootProvFuncs[0]),
+         rootProvFuncs,
+         NULL,
+         0,
+         NULL
+        };
+#endif
+
         read_trusted_roots_from_known_locations(memStore);
         add_ms_root_certs(memStore);
+#ifdef __REACTOS__
+        root = CRYPT_ProvCreateStore(0, memStore, &provInfo);
+        regStore = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, L"AuthRoot");
+        if (regStore)
+        {
+            HCERTSTORE collStore = CertOpenStore(CERT_STORE_PROV_COLLECTION, 0, 0,
+                CERT_STORE_CREATE_NEW_FLAG, NULL);
+            CertAddStoreToCollection(collStore, regStore, 0, 0);
+            CertAddStoreToCollection(collStore, root, 0, 0);
+            root = collStore;
+        }
+#endif
     }
-
+#ifdef __REACTOS__
+    TRACE("returning %p\n", root);
+    return root;
+#else
     TRACE("returning %p\n", memStore);
     return memStore;
+#endif
 }
 
 static const WCHAR certs_root_pathW[] =