mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 08:25:53 +00:00
[LSASRV]
Get rid of the ugly container object code. Let LsapCreateDbObject and LsapOpenDbObject handle container objects instead. svn path=/trunk/; revision=57449
This commit is contained in:
parent
0683a941e9
commit
b0d00a039a
|
@ -283,6 +283,7 @@ LsapCreateDatabaseObjects(VOID)
|
|||
|
||||
/* Open the 'Policy' object */
|
||||
Status = LsapOpenDbObject(NULL,
|
||||
NULL,
|
||||
L"Policy",
|
||||
LsaDbPolicyObject,
|
||||
0,
|
||||
|
@ -427,6 +428,7 @@ LsapInitDatabase(VOID)
|
|||
|
||||
NTSTATUS
|
||||
LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
|
||||
IN LPWSTR ContainerName,
|
||||
IN LPWSTR ObjectName,
|
||||
IN LSA_DB_OBJECT_TYPE ObjectType,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
|
@ -436,7 +438,8 @@ LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
UNICODE_STRING KeyName;
|
||||
HANDLE ParentKeyHandle;
|
||||
HANDLE ObjectKeyHandle;
|
||||
HANDLE ContainerKeyHandle = NULL;
|
||||
HANDLE ObjectKeyHandle = NULL;
|
||||
NTSTATUS Status;
|
||||
|
||||
if (DbObject == NULL)
|
||||
|
@ -447,6 +450,53 @@ LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
else
|
||||
ParentKeyHandle = ParentObject->KeyHandle;
|
||||
|
||||
if (ContainerName != NULL)
|
||||
{
|
||||
/* Open the container key */
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
ContainerName);
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&KeyName,
|
||||
OBJ_CASE_INSENSITIVE,
|
||||
ParentKeyHandle,
|
||||
NULL);
|
||||
|
||||
Status = NtOpenKey(&ContainerKeyHandle,
|
||||
KEY_ALL_ACCESS,
|
||||
&ObjectAttributes);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* Open the object key */
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
ObjectName);
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&KeyName,
|
||||
OBJ_CASE_INSENSITIVE,
|
||||
ContainerKeyHandle,
|
||||
NULL);
|
||||
|
||||
Status = NtCreateKey(&ObjectKeyHandle,
|
||||
KEY_ALL_ACCESS,
|
||||
&ObjectAttributes,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
NtClose(ContainerKeyHandle);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
ObjectName);
|
||||
|
||||
|
@ -467,6 +517,7 @@ LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
{
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
NewObject = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||
0,
|
||||
|
@ -495,6 +546,7 @@ LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
|
||||
NTSTATUS
|
||||
LsapOpenDbObject(IN PLSA_DB_OBJECT ParentObject,
|
||||
IN LPWSTR ContainerName,
|
||||
IN LPWSTR ObjectName,
|
||||
IN LSA_DB_OBJECT_TYPE ObjectType,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
|
@ -504,7 +556,8 @@ LsapOpenDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
UNICODE_STRING KeyName;
|
||||
HANDLE ParentKeyHandle;
|
||||
HANDLE ObjectKeyHandle;
|
||||
HANDLE ContainerKeyHandle = NULL;
|
||||
HANDLE ObjectKeyHandle = NULL;
|
||||
NTSTATUS Status;
|
||||
|
||||
if (DbObject == NULL)
|
||||
|
@ -515,6 +568,50 @@ LsapOpenDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
else
|
||||
ParentKeyHandle = ParentObject->KeyHandle;
|
||||
|
||||
if (ContainerName != NULL)
|
||||
{
|
||||
/* Open the container key */
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
ContainerName);
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&KeyName,
|
||||
OBJ_CASE_INSENSITIVE,
|
||||
ParentKeyHandle,
|
||||
NULL);
|
||||
|
||||
Status = NtOpenKey(&ContainerKeyHandle,
|
||||
KEY_ALL_ACCESS,
|
||||
&ObjectAttributes);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* Open the object key */
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
ObjectName);
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&KeyName,
|
||||
OBJ_CASE_INSENSITIVE,
|
||||
ContainerKeyHandle,
|
||||
NULL);
|
||||
|
||||
Status = NtOpenKey(&ObjectKeyHandle,
|
||||
KEY_ALL_ACCESS,
|
||||
&ObjectAttributes);
|
||||
|
||||
NtClose(ContainerKeyHandle);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Open the object key */
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
ObjectName);
|
||||
|
||||
|
@ -531,6 +628,7 @@ LsapOpenDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
{
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
NewObject = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||
0,
|
||||
|
|
|
@ -183,6 +183,7 @@ NTSTATUS WINAPI LsarOpenPolicy(
|
|||
RtlEnterCriticalSection(&PolicyHandleTableLock);
|
||||
|
||||
Status = LsapOpenDbObject(NULL,
|
||||
NULL,
|
||||
L"Policy",
|
||||
LsaDbPolicyObject,
|
||||
DesiredAccess,
|
||||
|
@ -435,7 +436,6 @@ NTSTATUS WINAPI LsarCreateAccount(
|
|||
LSAPR_HANDLE *AccountHandle)
|
||||
{
|
||||
PLSA_DB_OBJECT PolicyObject;
|
||||
PLSA_DB_OBJECT AccountsObject = NULL;
|
||||
PLSA_DB_OBJECT AccountObject = NULL;
|
||||
LPWSTR SidString = NULL;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
@ -455,18 +455,6 @@ NTSTATUS WINAPI LsarCreateAccount(
|
|||
return Status;
|
||||
}
|
||||
|
||||
/* Open the Accounts object */
|
||||
Status = LsapOpenDbObject(PolicyObject,
|
||||
L"Accounts",
|
||||
LsaDbContainerObject,
|
||||
0,
|
||||
&AccountsObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapCreateDbObject (Accounts) failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Create SID string */
|
||||
if (!ConvertSidToStringSid((PSID)AccountSid,
|
||||
&SidString))
|
||||
|
@ -477,14 +465,15 @@ NTSTATUS WINAPI LsarCreateAccount(
|
|||
}
|
||||
|
||||
/* Create the Account object */
|
||||
Status = LsapCreateDbObject(AccountsObject,
|
||||
Status = LsapCreateDbObject(PolicyObject,
|
||||
L"Accounts",
|
||||
SidString,
|
||||
LsaDbAccountObject,
|
||||
DesiredAccess,
|
||||
&AccountObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapCreateDbObject (Account) failed (Status 0x%08lx)\n", Status);
|
||||
ERR("LsapCreateDbObject failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -508,9 +497,6 @@ done:
|
|||
*AccountHandle = (LSAPR_HANDLE)AccountObject;
|
||||
}
|
||||
|
||||
if (AccountsObject != NULL)
|
||||
LsapCloseDbObject(AccountsObject);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -750,7 +736,6 @@ NTSTATUS WINAPI LsarCreateSecret(
|
|||
LSAPR_HANDLE *SecretHandle)
|
||||
{
|
||||
PLSA_DB_OBJECT PolicyObject;
|
||||
PLSA_DB_OBJECT SecretsObject = NULL;
|
||||
PLSA_DB_OBJECT SecretObject = NULL;
|
||||
LARGE_INTEGER Time;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
@ -766,18 +751,6 @@ NTSTATUS WINAPI LsarCreateSecret(
|
|||
return Status;
|
||||
}
|
||||
|
||||
/* Open the Secrets object */
|
||||
Status = LsapOpenDbObject(PolicyObject,
|
||||
L"Secrets",
|
||||
LsaDbContainerObject,
|
||||
0,
|
||||
&SecretsObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapCreateDbObject (Secrets) failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Get the current time */
|
||||
Status = NtQuerySystemTime(&Time);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
@ -787,14 +760,15 @@ NTSTATUS WINAPI LsarCreateSecret(
|
|||
}
|
||||
|
||||
/* Create the Secret object */
|
||||
Status = LsapCreateDbObject(SecretsObject,
|
||||
Status = LsapCreateDbObject(PolicyObject,
|
||||
L"Secrets",
|
||||
SecretName->Buffer,
|
||||
LsaDbSecretObject,
|
||||
DesiredAccess,
|
||||
&SecretObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapCreateDbObject (Secret) failed (Status 0x%08lx)\n", Status);
|
||||
ERR("LsapCreateDbObject failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -826,9 +800,6 @@ done:
|
|||
*SecretHandle = (LSAPR_HANDLE)SecretObject;
|
||||
}
|
||||
|
||||
if (SecretsObject != NULL)
|
||||
LsapCloseDbObject(SecretsObject);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -841,7 +812,6 @@ NTSTATUS WINAPI LsarOpenAccount(
|
|||
LSAPR_HANDLE *AccountHandle)
|
||||
{
|
||||
PLSA_DB_OBJECT PolicyObject;
|
||||
PLSA_DB_OBJECT AccountsObject = NULL;
|
||||
PLSA_DB_OBJECT AccountObject = NULL;
|
||||
LPWSTR SidString = NULL;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
@ -861,18 +831,6 @@ NTSTATUS WINAPI LsarOpenAccount(
|
|||
return Status;
|
||||
}
|
||||
|
||||
/* Open the Accounts object */
|
||||
Status = LsapOpenDbObject(PolicyObject,
|
||||
L"Accounts",
|
||||
LsaDbContainerObject,
|
||||
0,
|
||||
&AccountsObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapOpenDbObject (Accounts) failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Create SID string */
|
||||
if (!ConvertSidToStringSid((PSID)AccountSid,
|
||||
&SidString))
|
||||
|
@ -883,14 +841,15 @@ NTSTATUS WINAPI LsarOpenAccount(
|
|||
}
|
||||
|
||||
/* Create the Account object */
|
||||
Status = LsapOpenDbObject(AccountsObject,
|
||||
Status = LsapOpenDbObject(PolicyObject,
|
||||
L"Accounts",
|
||||
SidString,
|
||||
LsaDbAccountObject,
|
||||
DesiredAccess,
|
||||
&AccountObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapOpenDbObject (Account) failed (Status 0x%08lx)\n", Status);
|
||||
ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -914,9 +873,6 @@ done:
|
|||
*AccountHandle = (LSAPR_HANDLE)AccountObject;
|
||||
}
|
||||
|
||||
if (AccountsObject != NULL)
|
||||
LsapCloseDbObject(AccountsObject);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -1257,7 +1213,6 @@ NTSTATUS WINAPI LsarOpenSecret(
|
|||
LSAPR_HANDLE *SecretHandle)
|
||||
{
|
||||
PLSA_DB_OBJECT PolicyObject;
|
||||
PLSA_DB_OBJECT SecretsObject = NULL;
|
||||
PLSA_DB_OBJECT SecretObject = NULL;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
|
@ -1272,27 +1227,16 @@ NTSTATUS WINAPI LsarOpenSecret(
|
|||
return Status;
|
||||
}
|
||||
|
||||
/* Open the Secrets object */
|
||||
/* Create the secret object */
|
||||
Status = LsapOpenDbObject(PolicyObject,
|
||||
L"Secrets",
|
||||
LsaDbContainerObject,
|
||||
0,
|
||||
&SecretsObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapCreateDbObject (Secrets) failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Create the secret object */
|
||||
Status = LsapOpenDbObject(SecretsObject,
|
||||
SecretName->Buffer,
|
||||
LsaDbSecretObject,
|
||||
DesiredAccess,
|
||||
&SecretObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("LsapOpenDbObject (Secret) failed (Status 0x%08lx)\n", Status);
|
||||
ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -1307,9 +1251,6 @@ done:
|
|||
*SecretHandle = (LSAPR_HANDLE)SecretObject;
|
||||
}
|
||||
|
||||
if (SecretsObject != NULL)
|
||||
LsapCloseDbObject(SecretsObject);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
typedef enum _LSA_DB_OBJECT_TYPE
|
||||
{
|
||||
LsaDbIgnoreObject,
|
||||
LsaDbContainerObject,
|
||||
LsaDbPolicyObject,
|
||||
LsaDbAccountObject,
|
||||
LsaDbDomainObject,
|
||||
|
@ -71,6 +70,7 @@ LsapInitDatabase(VOID);
|
|||
|
||||
NTSTATUS
|
||||
LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
|
||||
IN LPWSTR ContainerName,
|
||||
IN LPWSTR ObjectName,
|
||||
IN LSA_DB_OBJECT_TYPE HandleType,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
|
@ -78,6 +78,7 @@ LsapCreateDbObject(IN PLSA_DB_OBJECT ParentObject,
|
|||
|
||||
NTSTATUS
|
||||
LsapOpenDbObject(IN PLSA_DB_OBJECT ParentObject,
|
||||
IN LPWSTR ContainerName,
|
||||
IN LPWSTR ObjectName,
|
||||
IN LSA_DB_OBJECT_TYPE ObjectType,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
|
|
Loading…
Reference in a new issue