Enable the use of generic access rights by mapping them to object specific right.

svn path=/trunk/; revision=58053
This commit is contained in:
Eric Kohl
2012-12-30 13:00:02 +00:00
parent d65327d318
commit b9f59dc28a
+84
View File
@@ -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,