From b9f59dc28a7388b7723903e72194ffd0a21f1075 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 30 Dec 2012 13:00:02 +0000 Subject: [PATCH] [SAMSRV] Enable the use of generic access rights by mapping them to object specific right. svn path=/trunk/; revision=58053 --- reactos/dll/win32/samsrv/samrpc.c | 84 +++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/reactos/dll/win32/samsrv/samrpc.c b/reactos/dll/win32/samsrv/samrpc.c index edb6dc2ce4f..88754bc5681 100644 --- a/reactos/dll/win32/samsrv/samrpc.c +++ b/reactos/dll/win32/samsrv/samrpc.c @@ -17,6 +17,46 @@ WINE_DEFAULT_DEBUG_CHANNEL(samsrv); static SID_IDENTIFIER_AUTHORITY NtSidAuthority = {SECURITY_NT_AUTHORITY}; +static GENERIC_MAPPING ServerMapping = +{ + SAM_SERVER_READ, + SAM_SERVER_WRITE, + SAM_SERVER_EXECUTE, + SAM_SERVER_ALL_ACCESS +}; + +static GENERIC_MAPPING DomainMapping = +{ + DOMAIN_READ, + DOMAIN_WRITE, + DOMAIN_EXECUTE, + DOMAIN_ALL_ACCESS +}; + +static GENERIC_MAPPING AliasMapping = +{ + ALIAS_READ, + ALIAS_WRITE, + ALIAS_EXECUTE, + ALIAS_ALL_ACCESS +}; + +static GENERIC_MAPPING GroupMapping = +{ + GROUP_READ, + GROUP_WRITE, + GROUP_EXECUTE, + GROUP_ALL_ACCESS +}; + +static GENERIC_MAPPING UserMapping = +{ + USER_READ, + USER_WRITE, + USER_EXECUTE, + USER_ALL_ACCESS +}; + /* FUNCTIONS *****************************************************************/ @@ -68,10 +108,12 @@ void __RPC_USER midl_user_free(void __RPC_FAR * ptr) HeapFree(GetProcessHeap(), 0, ptr); } + void __RPC_USER SAMPR_HANDLE_rundown(SAMPR_HANDLE hHandle) { } + /* Function 0 */ NTSTATUS NTAPI @@ -85,6 +127,11 @@ SamrConnect(IN PSAMPR_SERVER_NAME ServerName, TRACE("SamrConnect(%p %p %lx)\n", ServerName, ServerHandle, DesiredAccess); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &ServerMapping); + + /* Open the Server Object */ Status = SampOpenDbObject(NULL, NULL, L"SAM", @@ -100,6 +147,7 @@ SamrConnect(IN PSAMPR_SERVER_NAME ServerName, return Status; } + /* Function 1 */ NTSTATUS NTAPI @@ -125,6 +173,7 @@ SamrCloseHandle(IN OUT SAMPR_HANDLE *SamHandle) return Status; } + /* Function 2 */ NTSTATUS NTAPI @@ -136,6 +185,7 @@ SamrSetSecurityObject(IN SAMPR_HANDLE ObjectHandle, return STATUS_NOT_IMPLEMENTED; } + /* Function 3 */ NTSTATUS NTAPI @@ -147,6 +197,7 @@ SamrQuerySecurityObject(IN SAMPR_HANDLE ObjectHandle, return STATUS_NOT_IMPLEMENTED; } + /* Function 4 */ NTSTATUS NTAPI @@ -486,6 +537,10 @@ SamrOpenDomain(IN SAMPR_HANDLE ServerHandle, TRACE("SamrOpenDomain(%p %lx %p %p)\n", ServerHandle, DesiredAccess, DomainId, DomainHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &DomainMapping); + /* Validate the server handle */ Status = SampValidateDbObject(ServerHandle, SamDbServerObject, @@ -1653,6 +1708,10 @@ SamrCreateGroupInDomain(IN SAMPR_HANDLE DomainHandle, TRACE("SamrCreateGroupInDomain(%p %p %lx %p %p)\n", DomainHandle, Name, DesiredAccess, GroupHandle, RelativeId); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &GroupMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -2019,6 +2078,10 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, RelativeId == NULL) return STATUS_INVALID_PARAMETER; + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &UserMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -2473,6 +2536,10 @@ SamrCreateAliasInDomain(IN SAMPR_HANDLE DomainHandle, TRACE("SamrCreateAliasInDomain(%p %p %lx %p %p)\n", DomainHandle, AccountName, DesiredAccess, AliasHandle, RelativeId); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &AliasMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -3452,6 +3519,10 @@ SamrOpenGroup(IN SAMPR_HANDLE DomainHandle, TRACE("SamrOpenGroup(%p %lx %lx %p)\n", DomainHandle, DesiredAccess, GroupId, GroupHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &GroupMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -3900,6 +3971,10 @@ SamrOpenAlias(IN SAMPR_HANDLE DomainHandle, TRACE("SamrOpenAlias(%p %lx %lx %p)\n", DomainHandle, DesiredAccess, AliasId, AliasHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &AliasMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -4565,6 +4640,10 @@ SamrOpenUser(IN SAMPR_HANDLE DomainHandle, TRACE("SamrOpenUser(%p %lx %lx %p)\n", DomainHandle, DesiredAccess, UserId, UserHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &UserMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -6100,6 +6179,7 @@ SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, return Status; } + /* Function 38 */ NTSTATUS NTAPI @@ -6285,6 +6365,10 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, AccountType != USER_TEMP_DUPLICATE_ACCOUNT) return STATUS_INVALID_PARAMETER; + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &UserMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject,