mirror of
https://github.com/reactos/reactos.git
synced 2025-06-07 10:20:26 +00:00
[SAMSRV]
SamrGetAliasMembership: - Change requrred access right from DOMIN_LOOKUP to DOMAIN_GET_ALIAS_MEMBERSHIP. - Handle the case properly where a user is not a member of any alias. - Retrieve an alias members RID correctly. svn path=/trunk/; revision=58094
This commit is contained in:
parent
23e600a0d7
commit
cb52c27133
1 changed files with 28 additions and 9 deletions
|
@ -2877,6 +2877,7 @@ SamrGetAliasMembership(IN SAMPR_HANDLE DomainHandle,
|
||||||
ULONG DataLength;
|
ULONG DataLength;
|
||||||
ULONG i, j;
|
ULONG i, j;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
WCHAR NameBuffer[9];
|
||||||
|
|
||||||
TRACE("SamrGetAliasMembership(%p %p %p)\n",
|
TRACE("SamrGetAliasMembership(%p %p %p)\n",
|
||||||
DomainHandle, SidArray, Membership);
|
DomainHandle, SidArray, Membership);
|
||||||
|
@ -2884,7 +2885,7 @@ SamrGetAliasMembership(IN SAMPR_HANDLE DomainHandle,
|
||||||
/* Validate the domain handle */
|
/* Validate the domain handle */
|
||||||
Status = SampValidateDbObject(DomainHandle,
|
Status = SampValidateDbObject(DomainHandle,
|
||||||
SamDbDomainObject,
|
SamDbDomainObject,
|
||||||
DOMAIN_LOOKUP,
|
DOMAIN_GET_ALIAS_MEMBERSHIP,
|
||||||
&DomainObject);
|
&DomainObject);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -2902,6 +2903,13 @@ SamrGetAliasMembership(IN SAMPR_HANDLE DomainHandle,
|
||||||
KEY_READ,
|
KEY_READ,
|
||||||
&MembersKeyHandle);
|
&MembersKeyHandle);
|
||||||
TRACE("SampRegOpenKey returned %08lX\n", Status);
|
TRACE("SampRegOpenKey returned %08lX\n", Status);
|
||||||
|
|
||||||
|
if (Status == STATUS_OBJECT_NAME_NOT_FOUND)
|
||||||
|
{
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
@ -2926,13 +2934,21 @@ TRACE("Open %S\n", MemberSidString);
|
||||||
MaxSidCount += ValueCount;
|
MaxSidCount += ValueCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NtClose(MemberKeyHandle);
|
NtClose(MemberKeyHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Status == STATUS_OBJECT_NAME_NOT_FOUND)
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
LocalFree(MemberSidString);
|
LocalFree(MemberSidString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MaxSidCount == 0)
|
||||||
|
{
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
TRACE("Maximum sid count: %lu\n", MaxSidCount);
|
TRACE("Maximum sid count: %lu\n", MaxSidCount);
|
||||||
RidArray = midl_user_allocate(MaxSidCount * sizeof(ULONG));
|
RidArray = midl_user_allocate(MaxSidCount * sizeof(ULONG));
|
||||||
if (RidArray == NULL)
|
if (RidArray == NULL)
|
||||||
|
@ -2962,14 +2978,18 @@ TRACE("Open %S\n", MemberSidString);
|
||||||
|
|
||||||
for (j = 0; j < ValueCount; j++)
|
for (j = 0; j < ValueCount; j++)
|
||||||
{
|
{
|
||||||
DataLength = sizeof(ULONG);
|
DataLength = 9 * sizeof(WCHAR);
|
||||||
Status = SampRegEnumerateValue(MemberKeyHandle,
|
Status = SampRegEnumerateValue(MemberKeyHandle,
|
||||||
j,
|
j,
|
||||||
NULL,
|
NameBuffer,
|
||||||
NULL,
|
&DataLength,
|
||||||
NULL,
|
NULL,
|
||||||
(PVOID)&RidArray[j],
|
NULL,
|
||||||
&DataLength);
|
NULL);
|
||||||
|
if (NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
RidArray[j] = wcstoul(NameBuffer, NULL, 16);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2979,7 +2999,6 @@ TRACE("Open %S\n", MemberSidString);
|
||||||
LocalFree(MemberSidString);
|
LocalFree(MemberSidString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue