mirror of
https://github.com/reactos/reactos.git
synced 2024-07-06 20:55:16 +00:00
[SAMSRV]
Move some alias-specific code to alias.c, for later use by the setup code. svn path=/trunk/; revision=59069
This commit is contained in:
parent
09bc88e829
commit
7f698415cf
|
@ -39,4 +39,191 @@ SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject,
|
||||||
AliasObject);
|
AliasObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject,
|
||||||
|
IN PRPC_SID MemberId)
|
||||||
|
{
|
||||||
|
LPWSTR MemberIdString = NULL;
|
||||||
|
HANDLE MembersKeyHandle = NULL;
|
||||||
|
HANDLE MemberKeyHandle = NULL;
|
||||||
|
ULONG MemberIdLength;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
TRACE("(%p %p)\n",
|
||||||
|
AliasObject, MemberId);
|
||||||
|
|
||||||
|
ConvertSidToStringSidW(MemberId, &MemberIdString);
|
||||||
|
TRACE("Member SID: %S\n", MemberIdString);
|
||||||
|
|
||||||
|
MemberIdLength = RtlLengthSid(MemberId);
|
||||||
|
|
||||||
|
Status = SampRegCreateKey(AliasObject->KeyHandle,
|
||||||
|
L"Members",
|
||||||
|
KEY_WRITE,
|
||||||
|
&MembersKeyHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegCreateKey failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegSetValue(MembersKeyHandle,
|
||||||
|
MemberIdString,
|
||||||
|
REG_BINARY,
|
||||||
|
MemberId,
|
||||||
|
MemberIdLength);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegSetValue failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegCreateKey(AliasObject->MembersKeyHandle,
|
||||||
|
MemberIdString,
|
||||||
|
KEY_WRITE,
|
||||||
|
&MemberKeyHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegCreateKey failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegSetValue(MemberKeyHandle,
|
||||||
|
AliasObject->Name,
|
||||||
|
REG_BINARY,
|
||||||
|
MemberId,
|
||||||
|
MemberIdLength);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegSetValue failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (MemberKeyHandle != NULL)
|
||||||
|
SampRegCloseKey(MemberKeyHandle);
|
||||||
|
|
||||||
|
if (MembersKeyHandle != NULL)
|
||||||
|
SampRegCloseKey(MembersKeyHandle);
|
||||||
|
|
||||||
|
if (MemberIdString != NULL)
|
||||||
|
LocalFree(MemberIdString);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject,
|
||||||
|
IN PRPC_SID MemberId)
|
||||||
|
{
|
||||||
|
LPWSTR MemberIdString = NULL;
|
||||||
|
HANDLE MembersKeyHandle = NULL;
|
||||||
|
HANDLE MemberKeyHandle = NULL;
|
||||||
|
ULONG ulValueCount;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
TRACE("(%p %p)\n",
|
||||||
|
AliasObject, MemberId);
|
||||||
|
|
||||||
|
ConvertSidToStringSidW(MemberId, &MemberIdString);
|
||||||
|
TRACE("Member SID: %S\n", MemberIdString);
|
||||||
|
|
||||||
|
Status = SampRegOpenKey(AliasObject->MembersKeyHandle,
|
||||||
|
MemberIdString,
|
||||||
|
KEY_WRITE | KEY_QUERY_VALUE,
|
||||||
|
&MemberKeyHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegOpenKey failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegDeleteValue(MemberKeyHandle,
|
||||||
|
AliasObject->Name);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegDeleteValue failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegQueryKeyInfo(MemberKeyHandle,
|
||||||
|
NULL,
|
||||||
|
&ulValueCount);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegQueryKeyInfo failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ulValueCount == 0)
|
||||||
|
{
|
||||||
|
SampRegCloseKey(MemberKeyHandle);
|
||||||
|
MemberKeyHandle = NULL;
|
||||||
|
|
||||||
|
Status = SampRegDeleteKey(AliasObject->MembersKeyHandle,
|
||||||
|
MemberIdString);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegDeleteKey failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegOpenKey(AliasObject->KeyHandle,
|
||||||
|
L"Members",
|
||||||
|
KEY_WRITE | KEY_QUERY_VALUE,
|
||||||
|
&MembersKeyHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegOpenKey failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegDeleteValue(MembersKeyHandle,
|
||||||
|
MemberIdString);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegDeleteValue failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = SampRegQueryKeyInfo(MembersKeyHandle,
|
||||||
|
NULL,
|
||||||
|
&ulValueCount);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegQueryKeyInfo failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ulValueCount == 0)
|
||||||
|
{
|
||||||
|
SampRegCloseKey(MembersKeyHandle);
|
||||||
|
MembersKeyHandle = NULL;
|
||||||
|
|
||||||
|
Status = SampRegDeleteKey(AliasObject->KeyHandle,
|
||||||
|
L"Members");
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TRACE("SampRegDeleteKey failed with status 0x%08lx\n", Status);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (MemberKeyHandle != NULL)
|
||||||
|
SampRegCloseKey(MemberKeyHandle);
|
||||||
|
|
||||||
|
if (MembersKeyHandle != NULL)
|
||||||
|
SampRegCloseKey(MembersKeyHandle);
|
||||||
|
|
||||||
|
if (MemberIdString != NULL)
|
||||||
|
LocalFree(MemberIdString);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -4669,7 +4669,7 @@ SamrDeleteAlias(IN OUT SAMPR_HANDLE *AliasHandle)
|
||||||
&AliasObject);
|
&AliasObject);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
TRACE("failed with status 0x%08lx\n", Status);
|
TRACE("SampValidateDbObject failed (Status 0x%08lx)\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4704,14 +4704,9 @@ SamrAddMemberToAlias(IN SAMPR_HANDLE AliasHandle,
|
||||||
IN PRPC_SID MemberId)
|
IN PRPC_SID MemberId)
|
||||||
{
|
{
|
||||||
PSAM_DB_OBJECT AliasObject;
|
PSAM_DB_OBJECT AliasObject;
|
||||||
LPWSTR MemberIdString = NULL;
|
|
||||||
HANDLE MembersKeyHandle = NULL;
|
|
||||||
HANDLE MemberKeyHandle = NULL;
|
|
||||||
ULONG MemberIdLength;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
TRACE("SamrAddMemberToAlias(%p %p)\n",
|
TRACE("(%p %p)\n", AliasHandle, MemberId);
|
||||||
AliasHandle, MemberId);
|
|
||||||
|
|
||||||
/* Validate the alias handle */
|
/* Validate the alias handle */
|
||||||
Status = SampValidateDbObject(AliasHandle,
|
Status = SampValidateDbObject(AliasHandle,
|
||||||
|
@ -4724,63 +4719,13 @@ SamrAddMemberToAlias(IN SAMPR_HANDLE AliasHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConvertSidToStringSidW(MemberId, &MemberIdString);
|
Status = SampAddMemberToAlias(AliasObject,
|
||||||
TRACE("Member SID: %S\n", MemberIdString);
|
MemberId);
|
||||||
|
|
||||||
MemberIdLength = RtlLengthSid(MemberId);
|
|
||||||
|
|
||||||
Status = SampRegCreateKey(AliasObject->KeyHandle,
|
|
||||||
L"Members",
|
|
||||||
KEY_WRITE,
|
|
||||||
&MembersKeyHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
TRACE("SampRegCreateKey failed with status 0x%08lx\n", Status);
|
TRACE("failed with status 0x%08lx\n", Status);
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = SampRegSetValue(MembersKeyHandle,
|
|
||||||
MemberIdString,
|
|
||||||
REG_BINARY,
|
|
||||||
MemberId,
|
|
||||||
MemberIdLength);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegSetValue failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = SampRegCreateKey(AliasObject->MembersKeyHandle,
|
|
||||||
MemberIdString,
|
|
||||||
KEY_WRITE,
|
|
||||||
&MemberKeyHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegCreateKey failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = SampRegSetValue(MemberKeyHandle,
|
|
||||||
AliasObject->Name,
|
|
||||||
REG_BINARY,
|
|
||||||
MemberId,
|
|
||||||
MemberIdLength);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegSetValue failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
|
||||||
if (MemberKeyHandle != NULL)
|
|
||||||
SampRegCloseKey(MemberKeyHandle);
|
|
||||||
|
|
||||||
if (MembersKeyHandle != NULL)
|
|
||||||
SampRegCloseKey(MembersKeyHandle);
|
|
||||||
|
|
||||||
if (MemberIdString != NULL)
|
|
||||||
LocalFree(MemberIdString);
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4792,14 +4737,9 @@ SamrRemoveMemberFromAlias(IN SAMPR_HANDLE AliasHandle,
|
||||||
IN PRPC_SID MemberId)
|
IN PRPC_SID MemberId)
|
||||||
{
|
{
|
||||||
PSAM_DB_OBJECT AliasObject;
|
PSAM_DB_OBJECT AliasObject;
|
||||||
LPWSTR MemberIdString = NULL;
|
|
||||||
HANDLE MembersKeyHandle = NULL;
|
|
||||||
HANDLE MemberKeyHandle = NULL;
|
|
||||||
ULONG ulValueCount;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
TRACE("SamrRemoveMemberFromAlias(%p %p)\n",
|
TRACE("(%p %p)\n", AliasHandle, MemberId);
|
||||||
AliasHandle, MemberId);
|
|
||||||
|
|
||||||
/* Validate the alias handle */
|
/* Validate the alias handle */
|
||||||
Status = SampValidateDbObject(AliasHandle,
|
Status = SampValidateDbObject(AliasHandle,
|
||||||
|
@ -4812,101 +4752,13 @@ SamrRemoveMemberFromAlias(IN SAMPR_HANDLE AliasHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConvertSidToStringSidW(MemberId, &MemberIdString);
|
Status = SampRemoveMemberFromAlias(AliasObject,
|
||||||
TRACE("Member SID: %S\n", MemberIdString);
|
MemberId);
|
||||||
|
|
||||||
Status = SampRegOpenKey(AliasObject->MembersKeyHandle,
|
|
||||||
MemberIdString,
|
|
||||||
KEY_WRITE | KEY_QUERY_VALUE,
|
|
||||||
&MemberKeyHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
TRACE("SampRegOpenKey failed with status 0x%08lx\n", Status);
|
TRACE("failed with status 0x%08lx\n", Status);
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = SampRegDeleteValue(MemberKeyHandle,
|
|
||||||
AliasObject->Name);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegDeleteValue failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = SampRegQueryKeyInfo(MemberKeyHandle,
|
|
||||||
NULL,
|
|
||||||
&ulValueCount);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegQueryKeyInfo failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ulValueCount == 0)
|
|
||||||
{
|
|
||||||
SampRegCloseKey(MemberKeyHandle);
|
|
||||||
MemberKeyHandle = NULL;
|
|
||||||
|
|
||||||
Status = SampRegDeleteKey(AliasObject->MembersKeyHandle,
|
|
||||||
MemberIdString);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegDeleteKey failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = SampRegOpenKey(AliasObject->KeyHandle,
|
|
||||||
L"Members",
|
|
||||||
KEY_WRITE | KEY_QUERY_VALUE,
|
|
||||||
&MembersKeyHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegOpenKey failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = SampRegDeleteValue(MembersKeyHandle,
|
|
||||||
MemberIdString);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegDeleteValue failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = SampRegQueryKeyInfo(MembersKeyHandle,
|
|
||||||
NULL,
|
|
||||||
&ulValueCount);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegQueryKeyInfo failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ulValueCount == 0)
|
|
||||||
{
|
|
||||||
SampRegCloseKey(MembersKeyHandle);
|
|
||||||
MembersKeyHandle = NULL;
|
|
||||||
|
|
||||||
Status = SampRegDeleteKey(AliasObject->KeyHandle,
|
|
||||||
L"Members");
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
TRACE("SampRegDeleteKey failed with status 0x%08lx\n", Status);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
|
||||||
if (MemberKeyHandle != NULL)
|
|
||||||
SampRegCloseKey(MemberKeyHandle);
|
|
||||||
|
|
||||||
if (MembersKeyHandle != NULL)
|
|
||||||
SampRegCloseKey(MembersKeyHandle);
|
|
||||||
|
|
||||||
if (MemberIdString != NULL)
|
|
||||||
LocalFree(MemberIdString);
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,15 @@ SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject,
|
||||||
IN ACCESS_MASK DesiredAccess,
|
IN ACCESS_MASK DesiredAccess,
|
||||||
OUT PSAM_DB_OBJECT *AliasObject);
|
OUT PSAM_DB_OBJECT *AliasObject);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject,
|
||||||
|
IN PRPC_SID MemberId);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject,
|
||||||
|
IN PRPC_SID MemberId);
|
||||||
|
|
||||||
|
|
||||||
/* database.c */
|
/* database.c */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue