NTSTATUS WINAPI LsarClose(
LSAPR_HANDLE *ObjectHandle)
{
+ PLSA_DB_OBJECT DbObject;
NTSTATUS Status = STATUS_SUCCESS;
TRACE("0x%p\n", ObjectHandle);
Status = LsapValidateDbObject(*ObjectHandle,
LsaDbIgnoreObject,
- 0);
+ 0,
+ &DbObject);
if (Status == STATUS_SUCCESS)
{
- Status = LsapCloseDbObject(*ObjectHandle);
+ Status = LsapCloseDbObject(DbObject);
*ObjectHandle = NULL;
}
ACCESS_MASK DesiredAccess,
LSAPR_HANDLE *PolicyHandle)
{
- NTSTATUS Status = STATUS_SUCCESS;
+ PLSA_DB_OBJECT PolicyObject;
+ NTSTATUS Status;
TRACE("LsarOpenPolicy called!\n");
RtlEnterCriticalSection(&PolicyHandleTableLock);
- *PolicyHandle = LsapCreateDbObject(NULL,
- L"Policy",
- TRUE,
- LsaDbPolicyObject,
- DesiredAccess);
- if (*PolicyHandle == NULL)
- Status = STATUS_INSUFFICIENT_RESOURCES;
+ Status = LsapOpenDbObject(NULL,
+ L"Policy",
+ LsaDbPolicyObject,
+ DesiredAccess,
+ &PolicyObject);
RtlLeaveCriticalSection(&PolicyHandleTableLock);
+ if (NT_SUCCESS(Status))
+ *PolicyHandle = (LSAPR_HANDLE)PolicyObject;
+
TRACE("LsarOpenPolicy done!\n");
return Status;
POLICY_INFORMATION_CLASS InformationClass,
PLSAPR_POLICY_INFORMATION *PolicyInformation)
{
+ PLSA_DB_OBJECT DbObject;
NTSTATUS Status;
TRACE("LsarQueryInformationPolicy(%p,0x%08x,%p)\n",
Status = LsapValidateDbObject(PolicyHandle,
LsaDbPolicyObject,
- 0); /* FIXME */
+ 0, /* FIXME */
+ &DbObject);
if (!NT_SUCCESS(Status))
return Status;
POLICY_INFORMATION_CLASS InformationClass,
PLSAPR_POLICY_INFORMATION PolicyInformation)
{
+ PLSA_DB_OBJECT DbObject;
NTSTATUS Status;
TRACE("LsarSetInformationPolicy(%p,0x%08x,%p)\n",
Status = LsapValidateDbObject(PolicyHandle,
LsaDbPolicyObject,
- 0); /* FIXME */
+ 0, /* FIXME */
+ &DbObject);
if (!NT_SUCCESS(Status))
return Status;
ACCESS_MASK DesiredAccess,
LSAPR_HANDLE *AccountHandle)
{
- LSAPR_HANDLE AccountsHandle;
- LSAPR_HANDLE Account;
- LPWSTR SidString;
- NTSTATUS Status;
+ PLSA_DB_OBJECT PolicyObject;
+ PLSA_DB_OBJECT AccountsObject = NULL;
+ PLSA_DB_OBJECT AccountObject = NULL;
+ LPWSTR SidString = NULL;
+ NTSTATUS Status = STATUS_SUCCESS;
/* Validate the PolicyHandle */
Status = LsapValidateDbObject(PolicyHandle,
LsaDbPolicyObject,
- POLICY_CREATE_ACCOUNT);
+ POLICY_CREATE_ACCOUNT,
+ &PolicyObject);
if (!NT_SUCCESS(Status))
{
ERR("LsapValidateDbObject returned 0x%08lx\n", Status);
}
/* Open the Accounts object */
- AccountsHandle = LsapCreateDbObject(PolicyHandle,
- L"Accounts",
- TRUE,
- LsaDbContainerObject,
- 0);
- if (AccountsHandle == NULL)
+ Status = LsapOpenDbObject(PolicyObject,
+ L"Accounts",
+ LsaDbContainerObject,
+ 0,
+ &AccountsObject);
+ if (!NT_SUCCESS(Status))
{
- ERR("LsapCreateDbObject (Accounts) failed\n");
- return STATUS_UNSUCCESSFUL;
+ ERR("LsapCreateDbObject (Accounts) failed (Status 0x%08lx)\n", Status);
+ goto done;
}
/* Create SID string */
&SidString))
{
ERR("ConvertSidToStringSid failed\n");
- return STATUS_UNSUCCESSFUL;
+ Status = STATUS_INVALID_PARAMETER;
+ goto done;
}
/* Create the Account object */
- Account = LsapCreateDbObject(AccountsHandle,
- SidString,
- FALSE,
- LsaDbAccountObject,
- DesiredAccess);
- if (Account != NULL)
+ Status = LsapCreateDbObject(AccountsObject,
+ SidString,
+ LsaDbAccountObject,
+ DesiredAccess,
+ &AccountObject);
+ if (!NT_SUCCESS(Status))
{
- /* Set the Sid attribute */
- Status = LsapSetObjectAttribute((PLSA_DB_OBJECT)Account,
- L"Sid",
- (PVOID)AccountSid,
- GetLengthSid(AccountSid));
- if (NT_SUCCESS(Status))
- {
- *AccountHandle = Account;
- }
+ ERR("LsapCreateDbObject (Account) failed (Status 0x%08lx)\n", Status);
+ goto done;
}
- LocalFree(SidString);
+ /* Set the Sid attribute */
+ Status = LsapSetObjectAttribute(AccountObject,
+ L"Sid",
+ (PVOID)AccountSid,
+ GetLengthSid(AccountSid));
+
+done:
+ if (SidString != NULL)
+ LocalFree(SidString);
+
+ if (!NT_SUCCESS(Status))
+ {
+ if (AccountObject != NULL)
+ LsapCloseDbObject(AccountObject);
+ }
+ else
+ {
+ *AccountHandle = (LSAPR_HANDLE)AccountObject;
+ }
- LsapCloseDbObject(AccountsHandle);
+ if (AccountsObject != NULL)
+ LsapCloseDbObject(AccountsObject);
return STATUS_SUCCESS;
}
Status = LsapValidateDbObject(PolicyHandle,
LsaDbPolicyObject,
- 0); /* FIXME */
+ 0, /* FIXME */
+ NULL);
if (!NT_SUCCESS(Status))
{
ERR("Invalid handle (Status %lx)\n", Status);
Status = LsapValidateDbObject(PolicyHandle,
LsaDbPolicyObject,
- 0); /* FIXME */
+ 0, /* FIXME */
+ NULL);
if (!NT_SUCCESS(Status))
{
ERR("Invalid handle\n");
PRPC_SID AccountSid,
PLSAPR_USER_RIGHT_SET UserRights)
{
+ PLSA_DB_OBJECT PolicyObject;
NTSTATUS Status;
FIXME("(%p,%p,%p) stub\n", PolicyHandle, AccountSid, UserRights);
Status = LsapValidateDbObject(PolicyHandle,
LsaDbPolicyObject,
- 0); /* FIXME */
+ 0, /* FIXME */
+ &PolicyObject);
if (!NT_SUCCESS(Status))
return Status;