- Implement AddAccessAllowedAceEx, AddAccessDeniedAceEx and AddAuditAccessAceEx.
[reactos.git] / reactos / lib / advapi32 / sec / ac.c
index 8f21909..181a1c2 100644 (file)
@@ -1,16 +1,20 @@
-/* $Id: ac.c,v 1.1 1999/11/07 08:04:55 ea Exp $
+/* $Id: ac.c,v 1.11 2004/09/13 12:14:11 ekohl Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS system libraries
  * FILE:            lib/advapi32/sec/ac.c
  * PURPOSE:         ACL/ACE functions
  */
-#include <windows.h>
+
+#include "advapi32.h"
 
 
 /* --- ACL --- */
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 GetAclInformation (
        PACL                    pAcl,
@@ -19,94 +23,26 @@ GetAclInformation (
        ACL_INFORMATION_CLASS   dwAclInformationClass
        )
 {
-       SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
-
-
-#if 0
-DWORD
-WINAPI
-GetAuditedPermissionsFromAclA (
-       IN      PACL            pacl,
-       IN      PTRUSTEE_A      pTrustee,
-       OUT     PACCESS_MASK    pSuccessfulAuditedRights,
-       OUT     PACCESS_MASK    pFailedAuditRights
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+       NTSTATUS Status;
+
+       Status = RtlQueryInformationAcl (pAcl,
+                                        pAclInformation,
+                                        nAclInformationLength,
+                                        dwAclInformationClass);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
 
-DWORD
-WINAPI
-GetAuditedPermissionsFromAclW (
-       IN      PACL            pacl,
-       IN      PTRUSTEE_W      pTrustee,
-       OUT     PACCESS_MASK    pSuccessfulAuditedRights,
-       OUT     PACCESS_MASK    pFailedAuditRights
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
-DWORD
-WINAPI
-GetEffectiveRightsFromAclA (
-       IN      PACL            pacl,
-       IN      PTRUSTEE_A      pTrustee,
-       OUT     PACCESS_MASK    pAccessRights
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
-DWORD
-WINAPI
-GetEffectiveRightsFromAclW (
-       IN      PACL            pacl,
-       IN      PTRUSTEE_W      pTrustee,
-       OUT     PACCESS_MASK    pAccessRights
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
-DWORD
-WINAPI
-GetExplicitEntriesFromAclA (
-       IN      PACL                    pacl,
-       OUT     PULONG                  pcCountOfExplicitEntries,
-       OUT     PEXPLICIT_ACCESS_A      * pListOfExplicitEntries
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
-DWORD
-WINAPI
-GetExplicitEntriesFromAclW (
-       IN      PACL                    pacl,
-       OUT     PULONG                  pcCountOfExplicitEntries,
-       OUT     PEXPLICIT_ACCESS_W      * pListOfExplicitEntries
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-#endif
-
-
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 InitializeAcl (
        PACL    pAcl,
@@ -114,23 +50,38 @@ InitializeAcl (
        DWORD   dwAclRevision
        )
 {
-       SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlCreateAcl (pAcl,
+                              nAclLength,
+                              dwAclRevision);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 IsValidAcl (
        PACL    pAcl
        )
 {
-       SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       return RtlValidAcl (pAcl);
 }
 
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 SetAclInformation (
        PACL                    pAcl,
@@ -139,47 +90,28 @@ SetAclInformation (
        ACL_INFORMATION_CLASS   dwAclInformationClass
        )
 {
-       SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlSetInformationAcl (pAcl,
+                                      pAclInformation,
+                                      nAclInformationLength,
+                                      dwAclInformationClass);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
 
-#if 0
-DWORD
-WINAPI
-SetEntriesInAclA (
-       IN      ULONG                   cCountOfExplicitEntries,
-       IN      PEXPLICIT_ACCESS_A      pListOfExplicitEntries,
-       IN      PACL                    OldAcl,
-       OUT     PACL                    * NewAcl
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
-DWORD
-WINAPI
-SetEntriesInAclW (
-       IN      ULONG                   cCountOfExplicitEntries,
-       IN      PEXPLICIT_ACCESS_W      pListOfExplicitEntries,
-       IN      PACL                    OldAcl,
-       OUT     PACL                    * NewAcl
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-#endif
-
-
-
 /* --- ACE --- */
 
-
-
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 AddAccessAllowedAce (
        PACL    pAcl,
@@ -188,13 +120,53 @@ AddAccessAllowedAce (
        PSID    pSid
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlAddAccessAllowedAce (pAcl,
+                                        dwAceRevision,
+                                        AccessMask,
+                                        pSid);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
 
+/*
+ * @implemented
+ */
+BOOL STDCALL
+AddAccessAllowedAceEx(PACL pAcl,
+                     DWORD dwAceRevision,
+                     DWORD AceFlags,
+                     DWORD AccessMask,
+                     PSID pSid)
+{
+  NTSTATUS Status;
+
+  Status = RtlAddAccessAllowedAceEx(pAcl,
+                                    dwAceRevision,
+                                    AceFlags,
+                                    AccessMask,
+                                    pSid);
+  if (!NT_SUCCESS(Status))
+  {
+    SetLastError(RtlNtStatusToDosError(Status));
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 AddAccessDeniedAce (
        PACL    pAcl,
@@ -203,12 +175,53 @@ AddAccessDeniedAce (
        PSID    pSid
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlAddAccessDeniedAce (pAcl,
+                                       dwAceRevision,
+                                       AccessMask,
+                                       pSid);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
+AddAccessDeniedAceEx(PACL pAcl,
+                    DWORD dwAceRevision,
+                    DWORD AceFlags,
+                    DWORD AccessMask,
+                    PSID pSid)
+{
+  NTSTATUS Status;
+
+  Status = RtlAddAccessDeniedAceEx(pAcl,
+                                   dwAceRevision,
+                                   AceFlags,
+                                   AccessMask,
+                                   pSid);
+  if (!NT_SUCCESS(Status))
+  {
+    SetLastError(RtlNtStatusToDosError(Status));
+    return FALSE;
+  }
+
+  return TRUE;
 }
 
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 AddAce (
        PACL    pAcl,
@@ -218,53 +231,129 @@ AddAce (
        DWORD   nAceListLength
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlAddAce (pAcl,
+                           dwAceRevision,
+                           dwStartingAceIndex,
+                           pAceList,
+                           nAceListLength);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
 
-
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 AddAuditAccessAce (
        PACL    pAcl,
        DWORD   dwAceRevision,
        DWORD   dwAccessMask,
        PSID    pSid,
-       WINBOOL bAuditSuccess,
-       WINBOOL bAuditFailure
+       BOOL    bAuditSuccess,
+       BOOL    bAuditFailure
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlAddAuditAccessAce (pAcl,
+                                      dwAceRevision,
+                                      dwAccessMask,
+                                      pSid,
+                                      bAuditSuccess,
+                                      bAuditFailure);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
+AddAuditAccessAceEx(PACL pAcl,
+                   DWORD dwAceRevision,
+                   DWORD AceFlags,
+                   DWORD dwAccessMask,
+                   PSID pSid,
+                   BOOL bAuditSuccess,
+                   BOOL bAuditFailure)
+{
+  NTSTATUS Status;
+
+  Status = RtlAddAuditAccessAceEx(pAcl,
+                                  dwAceRevision,
+                                  AceFlags,
+                                  dwAccessMask,
+                                  pSid,
+                                  bAuditSuccess,
+                                  bAuditFailure);
+  if (!NT_SUCCESS(Status))
+  {
+    SetLastError(RtlNtStatusToDosError(Status));
+    return FALSE;
+  }
+
+  return TRUE;
 }
 
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 DeleteAce (
        PACL    pAcl,
        DWORD   dwAceIndex
        )
 {
-       SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlDeleteAce (pAcl,
+                              dwAceIndex);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 FindFirstFreeAce (
        PACL    pAcl,
        LPVOID  * pAce
        )
 {
-       SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       return RtlFirstFreeAce (pAcl,
+                               (PACE*)pAce);
 }
 
 
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
 STDCALL
 GetAce (
        PACL    pAcl,
@@ -272,9 +361,18 @@ GetAce (
        LPVOID  * pAce
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+       NTSTATUS Status;
+
+       Status = RtlGetAce (pAcl,
+                           dwAceIndex,
+                           (PACE*)pAce);
+       if (!NT_SUCCESS(Status))
+       {
+               SetLastError (RtlNtStatusToDosError (Status));
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
-
 /* EOF */