[ros-diffs] [weiden] 16806: implemented SetEntriesInAclA/W and forward the call to the MARTA provider

weiden at svn.reactos.com weiden at svn.reactos.com
Wed Jul 27 19:21:03 CEST 2005


implemented SetEntriesInAclA/W and forward the call to the MARTA
provider
Modified: trunk/reactos/lib/advapi32/advapi32.def
Modified: trunk/reactos/lib/advapi32/advapi32.h
Modified: trunk/reactos/lib/advapi32/sec/ac.c
Modified: trunk/reactos/lib/advapi32/sec/misc.c
Modified: trunk/reactos/lib/ntmarta/ntmarta.c
Modified: trunk/reactos/lib/ntmarta/ntmarta.def
  _____  

Modified: trunk/reactos/lib/advapi32/advapi32.def
--- trunk/reactos/lib/advapi32/advapi32.def	2005-07-27 17:06:06 UTC
(rev 16805)
+++ trunk/reactos/lib/advapi32/advapi32.def	2005-07-27 17:20:57 UTC
(rev 16806)
@@ -550,8 +550,8 @@

 SetAclInformation at 16
 ;SetEntriesInAccessListA
 ;SetEntriesInAccessListW
-;SetEntriesInAclA at 16
-;SetEntriesInAclW at 16
+SetEntriesInAclA at 16
+SetEntriesInAclW at 16
 ;SetEntriesInAuditListA
 ;SetEntriesInAuditListW
 SetFileSecurityA at 12
  _____  

Modified: trunk/reactos/lib/advapi32/advapi32.h
--- trunk/reactos/lib/advapi32/advapi32.h	2005-07-27 17:06:06 UTC
(rev 16805)
+++ trunk/reactos/lib/advapi32/advapi32.h	2005-07-27 17:20:57 UTC
(rev 16806)
@@ -18,4 +18,82 @@

 #define NTOS_MODE_USER
 #include <ndk/ntndk.h>
 
+/* Interface to ntmarta.dll
**************************************************/
+
+typedef struct _NTMARTA
+{
+    HINSTANCE hDllInstance;
+
+    PVOID LookupAccountTrustee;
+    PVOID LookupAccountName;
+    PVOID LookupAccountSid;
+    PVOID SetEntriesInAList;
+    PVOID ConvertAccessToSecurityDescriptor;
+    PVOID ConvertSDToAccess;
+    PVOID ConvertAclToAccess;
+    PVOID GetAccessForTrustee;
+    PVOID GetExplicitEntries;
+
+    DWORD (STDCALL *RewriteGetNamedRights)(LPWSTR pObjectName,
+                                           SE_OBJECT_TYPE ObjectType,
+                                           SECURITY_INFORMATION
SecurityInfo,
+                                           PSID* ppsidOwner,
+                                           PSID* ppsidGroup,
+                                           PACL* ppDacl,
+                                           PACL* ppSacl,
+                                           PSECURITY_DESCRIPTOR*
ppSecurityDescriptor);
+
+    DWORD (STDCALL *RewriteSetNamedRights)(LPWSTR pObjectName,
+                                           SE_OBJECT_TYPE ObjectType,
+                                           SECURITY_INFORMATION
SecurityInfo,
+                                           PSECURITY_DESCRIPTOR
pSecurityDescriptor);
+
+    DWORD (STDCALL *RewriteGetHandleRights)(HANDLE handle,
+                                            SE_OBJECT_TYPE ObjectType,
+                                            SECURITY_INFORMATION
SecurityInfo,
+                                            PSID* ppsidOwner,
+                                            PSID* ppsidGroup,
+                                            PACL* ppDacl,
+                                            PACL* ppSacl,
+                                            PSECURITY_DESCRIPTOR*
ppSecurityDescriptor);
+
+    DWORD (STDCALL *RewriteSetHandleRights)(HANDLE handle,
+                                            SE_OBJECT_TYPE ObjectType,
+                                            SECURITY_INFORMATION
SecurityInfo,
+                                            PSECURITY_DESCRIPTOR
pSecurityDescriptor);
+
+    DWORD (STDCALL *RewriteSetEntriesInAcl)(ULONG
cCountOfExplicitEntries,
+                                            PEXPLICIT_ACCESS_W
pListOfExplicitEntries,
+                                            PACL OldAcl,
+                                            PACL* NewAcl);
+
+    PVOID RewriteGetExplicitEntriesFromAcl;
+    PVOID TreeResetNamedSecurityInfo;
+    PVOID GetInheritanceSource;
+    PVOID FreeIndexArray;
+} NTMARTA, *PNTMARTA;
+
+#define AccLookupAccountTrustee NtMartaStatic.LookupAccountTrustee
+#define AccLookupAccountName NtMartaStatic.LookupAccountName
+#define AccLookupAccountSid NtMartaStatic.LookupAccountSid
+#define AccSetEntriesInAList NtMartaStatic.SetEntriesInAList
+#define AccConvertAccessToSecurityDescriptor
NtMartaStatic.ConvertAccessToSecurityDescriptor
+#define AccConvertSDToAccess NtMartaStatic.ConvertSDToAccess
+#define AccConvertAclToAccess NtMartaStatic.ConvertAclToAccess
+#define AccGetAccessForTrustee NtMartaStatic.GetAccessForTrustee
+#define AccGetExplicitEntries NtMartaStatic.GetExplicitEntries
+#define AccRewriteGetNamedRights NtMartaStatic.RewriteGetNamedRights
+#define AccRewriteSetNamedRights NtMartaStatic.RewriteSetNamedRights
+#define AccRewriteGetHandleRights NtMartaStatic.RewriteGetHandleRights
+#define AccRewriteSetHandleRights NtMartaStatic.RewriteSetHandleRights
+#define AccRewriteSetEntriesInAcl NtMartaStatic.RewriteSetEntriesInAcl
+#define AccRewriteGetExplicitEntriesFromAcl
NtMartaStatic.RewriteGetExplicitEntriesFromAcl
+#define AccTreeResetNamedSecurityInfo
NtMartaStatic.TreeResetNamedSecurityInfo
+#define AccGetInheritanceSource NtMartaStatic.GetInheritanceSource
+#define AccFreeIndexArray NtMartaStatic.FreeIndexArray
+
+extern NTMARTA NtMartaStatic;
+
+DWORD CheckNtMartaPresent(VOID);
+
 /* EOF */
  _____  

Modified: trunk/reactos/lib/advapi32/sec/ac.c
--- trunk/reactos/lib/advapi32/sec/ac.c	2005-07-27 17:06:06 UTC (rev
16805)
+++ trunk/reactos/lib/advapi32/sec/ac.c	2005-07-27 17:20:57 UTC (rev
16806)
@@ -495,4 +495,147 @@

 	return ERROR_CALL_NOT_IMPLEMENTED;
 }
 
+
+/*
+ * @implemented
+ */
+DWORD
+STDCALL
+SetEntriesInAclW(
+	ULONG			cCountOfExplicitEntries,
+	PEXPLICIT_ACCESS_W	pListOfExplicitEntries,
+	PACL			OldAcl,
+	PACL*			NewAcl)
+{
+    DWORD ErrorCode;
+
+    ErrorCode = CheckNtMartaPresent();
+    if (ErrorCode == ERROR_SUCCESS)
+    {
+        /* call the MARTA provider */
+        ErrorCode = AccRewriteSetEntriesInAcl(cCountOfExplicitEntries,
+                                              pListOfExplicitEntries,
+                                              OldAcl,
+                                              NewAcl);
+    }
+
+    return ErrorCode;
+}
+
+
+/*
+ * @implemented
+ */
+DWORD
+STDCALL
+SetEntriesInAclA(
+	ULONG			cCountOfExplicitEntries,
+	PEXPLICIT_ACCESS_A	pListOfExplicitEntries,
+	PACL			OldAcl,
+	PACL*			NewAcl)
+{
+    PEXPLICIT_ACCESS_W ListOfExplicitEntriesW;
+    ULONG i;
+    DWORD ErrorCode;
+
+    if (cCountOfExplicitEntries != 0)
+    {
+        ListOfExplicitEntriesW = HeapAlloc(GetProcessHeap(),
+                                           0,
+                                           cCountOfExplicitEntries *
sizeof(EXPLICIT_ACCESS_W));
+        if (ListOfExplicitEntriesW != NULL)
+        {
+            /* directly copy the array, this works as the size of the
EXPLICIT_ACCESS_A
+               structure matches the size of the EXPLICIT_ACCESS_W
version */
+            ASSERT(sizeof(EXPLICIT_ACCESS_A) ==
sizeof(EXPLICIT_ACCESS_W));
+
+            RtlCopyMemory(ListOfExplicitEntriesW,
+                          pListOfExplicitEntries,
+                          cCountOfExplicitEntries *
sizeof(EXPLICIT_ACCESS_W));
+
+            /* convert the trustee names if required */
+            for (i = 0; i != cCountOfExplicitEntries; i++)
+            {
+                if (pListOfExplicitEntries[i].Trustee.TrusteeForm ==
TRUSTEE_IS_NAME)
+                {
+                    UINT BufCount =
strlen(pListOfExplicitEntries[i].Trustee.ptstrName) + 1;
+                    ListOfExplicitEntriesW[i].Trustee.ptstrName =
+                        (LPWSTR)HeapAlloc(GetProcessHeap(),
+                                          0,
+                                          BufCount * sizeof(WCHAR));
+
+                    if (ListOfExplicitEntriesW[i].Trustee.ptstrName ==
NULL ||
+                        MultiByteToWideChar(CP_ACP,
+                                            0,
+
pListOfExplicitEntries[i].Trustee.ptstrName,
+                                            -1,
+
ListOfExplicitEntriesW[i].Trustee.ptstrName,
+                                            BufCount) == 0)
+                    {
+                        /* failed to allocate enough momory for the
strings or failed to
+                           convert the ansi string to unicode, then
fail and free all
+                           allocated memory */
+
+                        ErrorCode = GetLastError();
+
+                        while (i != 0)
+                        {
+                            if
(ListOfExplicitEntriesW[i].Trustee.TrusteeForm == TRUSTEE_IS_NAME &&
+
ListOfExplicitEntriesW[i].Trustee.ptstrName != NULL)
+                            {
+                                HeapFree(GetProcessHeap(),
+                                         0,
+
ListOfExplicitEntriesW[i].Trustee.ptstrName);
+                            }
+
+                            i--;
+                        }
+
+                        /* free the allocated array */
+                        HeapFree(GetProcessHeap(),
+                                 0,
+                                 ListOfExplicitEntriesW);
+
+                        return ErrorCode;
+                    }
+                }
+            }
+        }
+        else
+        {
+            return GetLastError();
+        }
+    }
+    else
+        ListOfExplicitEntriesW = NULL;
+
+    ErrorCode = SetEntriesInAclW(cCountOfExplicitEntries,
+                                 ListOfExplicitEntriesW,
+                                 OldAcl,
+                                 NewAcl);
+
+    /* free the strings */
+    if (ListOfExplicitEntriesW != NULL)
+    {
+        /* free the converted strings */
+        for (i = 0; i != cCountOfExplicitEntries; i++)
+        {
+            if (ListOfExplicitEntriesW[i].Trustee.TrusteeForm ==
TRUSTEE_IS_NAME)
+            {
+                HeapFree(GetProcessHeap(),
+                         0,
+                         ListOfExplicitEntriesW[i].Trustee.ptstrName);
+            }
+        }
+
+        /* free the allocated array */
+        HeapFree(GetProcessHeap(),
+                 0,
+                 ListOfExplicitEntriesW);
+    }
+
+    return ErrorCode;
+}
+
+
 /* EOF */
  _____  

Modified: trunk/reactos/lib/advapi32/sec/misc.c
--- trunk/reactos/lib/advapi32/sec/misc.c	2005-07-27 17:06:06 UTC
(rev 16805)
+++ trunk/reactos/lib/advapi32/sec/misc.c	2005-07-27 17:20:57 UTC
(rev 16806)
@@ -15,77 +15,9 @@

 
 /* Interface to ntmarta.dll
***************************************************/
 
-typedef struct _NTMARTA
-{
-    HINSTANCE hDllInstance;
-
-    PVOID LookupAccountTrustee;
-    PVOID LookupAccountName;
-    PVOID LookupAccountSid;
-    PVOID SetEntriesInAList;
-    PVOID ConvertAccessToSecurityDescriptor;
-    PVOID ConvertSDToAccess;
-    PVOID ConvertAclToAccess;
-    PVOID GetAccessForTrustee;
-    PVOID GetExplicitEntries;
-
-    DWORD (STDCALL *RewriteGetNamedRights)(LPWSTR pObjectName,
-                                           SE_OBJECT_TYPE ObjectType,
-                                           SECURITY_INFORMATION
SecurityInfo,
-                                           PSID* ppsidOwner,
-                                           PSID* ppsidGroup,
-                                           PACL* ppDacl,
-                                           PACL* ppSacl,
-                                           PSECURITY_DESCRIPTOR*
ppSecurityDescriptor);
-
-    DWORD (STDCALL *RewriteSetNamedRights)(LPWSTR pObjectName,
-                                           SE_OBJECT_TYPE ObjectType,
-                                           SECURITY_INFORMATION
SecurityInfo,
-                                           PSECURITY_DESCRIPTOR
pSecurityDescriptor);
-
-    DWORD (STDCALL *RewriteGetHandleRights)(HANDLE handle,
-                                            SE_OBJECT_TYPE ObjectType,
-                                            SECURITY_INFORMATION
SecurityInfo,
-                                            PSID* ppsidOwner,
-                                            PSID* ppsidGroup,
-                                            PACL* ppDacl,
-                                            PACL* ppSacl,
-                                            PSECURITY_DESCRIPTOR*
ppSecurityDescriptor);
-
-    DWORD (STDCALL *RewriteSetHandleRights)(HANDLE handle,
-                                            SE_OBJECT_TYPE ObjectType,
-                                            SECURITY_INFORMATION
SecurityInfo,
-                                            PSECURITY_DESCRIPTOR
pSecurityDescriptor);
-
-    PVOID RewriteSetEntriesInAcl;
-    PVOID RewriteGetExplicitEntriesFromAcl;
-    PVOID TreeResetNamedSecurityInfo;
-    PVOID GetInheritanceSource;
-    PVOID FreeIndexArray;
-} NTMARTA, *PNTMARTA;
-
-static NTMARTA NtMartaStatic = { 0 };
+NTMARTA NtMartaStatic = { 0 };
 static PNTMARTA NtMarta = NULL;
 
-#define AccLookupAccountTrustee NtMartaStatic.LookupAccountTrustee
-#define AccLookupAccountName NtMartaStatic.LookupAccountName
-#define AccLookupAccountSid NtMartaStatic.LookupAccountSid
-#define AccSetEntriesInAList NtMartaStatic.SetEntriesInAList
-#define AccConvertAccessToSecurityDescriptor
NtMartaStatic.ConvertAccessToSecurityDescriptor
-#define AccConvertSDToAccess NtMartaStatic.ConvertSDToAccess
-#define AccConvertAclToAccess NtMartaStatic.ConvertAclToAccess
-#define AccGetAccessForTrustee NtMartaStatic.GetAccessForTrustee
-#define AccGetExplicitEntries NtMartaStatic.GetExplicitEntries
-#define AccRewriteGetNamedRights NtMartaStatic.RewriteGetNamedRights
-#define AccRewriteSetNamedRights NtMartaStatic.RewriteSetNamedRights
-#define AccRewriteGetHandleRights NtMartaStatic.RewriteGetHandleRights
-#define AccRewriteSetHandleRights NtMartaStatic.RewriteSetHandleRights
-#define AccRewriteSetEntriesInAcl NtMartaStatic.RewriteSetEntriesInAcl
-#define AccRewriteGetExplicitEntriesFromAcl
NtMartaStatic.RewriteGetExplicitEntriesFromAcl
-#define AccTreeResetNamedSecurityInfo
NtMartaStatic.TreeResetNamedSecurityInfo
-#define AccGetInheritanceSource NtMartaStatic.GetInheritanceSource
-#define AccFreeIndexArray NtMartaStatic.FreeIndexArray
-
 #define FindNtMartaProc(Name)
\
     NtMartaStatic.Name =
(PVOID)GetProcAddress(NtMartaStatic.hDllInstance,     \
                                                "Acc" # Name );
\
@@ -126,8 +58,8 @@
     FindNtMartaProc(RewriteSetNamedRights);
     FindNtMartaProc(RewriteGetHandleRights);
     FindNtMartaProc(RewriteSetHandleRights);
-#if 0
     FindNtMartaProc(RewriteSetEntriesInAcl);
+#if 0
     FindNtMartaProc(RewriteGetExplicitEntriesFromAcl);
     FindNtMartaProc(TreeResetNamedSecurityInfo);
     FindNtMartaProc(GetInheritanceSource);
@@ -137,7 +69,7 @@
     return ERROR_SUCCESS;
 }
 
-static DWORD
+DWORD
 CheckNtMartaPresent(VOID)
 {
     DWORD ErrorCode;
  _____  

Modified: trunk/reactos/lib/ntmarta/ntmarta.c
--- trunk/reactos/lib/ntmarta/ntmarta.c	2005-07-27 17:06:06 UTC (rev
16805)
+++ trunk/reactos/lib/ntmarta/ntmarta.c	2005-07-27 17:20:57 UTC (rev
16806)
@@ -105,6 +105,22 @@

 }
 
 
+/**********************************************************************
+ * AccRewriteSetEntriesInAcl				EXPORTED
+ *
+ * @unimplemented
+ */
+DWORD STDCALL
+AccRewriteSetEntriesInAcl(ULONG cCountOfExplicitEntries,
+                          PEXPLICIT_ACCESS_W pListOfExplicitEntries,
+                          PACL OldAcl,
+                          PACL* NewAcl)
+{
+    UNIMPLEMENTED;
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+
 BOOL STDCALL
 DllMain(IN HINSTANCE hinstDLL,
         IN DWORD dwReason,
  _____  

Modified: trunk/reactos/lib/ntmarta/ntmarta.def
--- trunk/reactos/lib/ntmarta/ntmarta.def	2005-07-27 17:06:06 UTC
(rev 16805)
+++ trunk/reactos/lib/ntmarta/ntmarta.def	2005-07-27 17:20:57 UTC
(rev 16806)
@@ -7,7 +7,7 @@

 ;AccRewriteGetExplicitEntriesFromAcl
 AccRewriteGetHandleRights at 32
 AccRewriteGetNamedRights at 32
-;AccRewriteSetEntriesInAcl
+AccRewriteSetEntriesInAcl at 16
 AccRewriteSetHandleRights at 16
 AccRewriteSetNamedRights at 16
 ;AccTreeResetNamedSecurityInfo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20050727/5a543a16/attachment.html


More information about the Ros-diffs mailing list