mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[LSASRV]
- LsarQueryAuditEvents: Do not fail if the PolAdtEv attribute does not exist and return proper inormation to the caller. - Implement LsarSetAuditEvents. svn path=/trunk/; revision=57837
This commit is contained in:
parent
16c5f9f124
commit
90b34c856c
1 changed files with 55 additions and 12 deletions
|
@ -90,6 +90,7 @@ LsarQueryAuditEvents(PLSA_DB_OBJECT PolicyObject,
|
|||
if (!NT_SUCCESS(Status))
|
||||
return Status;
|
||||
|
||||
TRACE("Attribute size: %lu\n", AttributeSize);
|
||||
if (AttributeSize > 0)
|
||||
{
|
||||
AuditData = MIDL_user_allocate(AttributeSize);
|
||||
|
@ -102,14 +103,23 @@ LsarQueryAuditEvents(PLSA_DB_OBJECT PolicyObject,
|
|||
&AttributeSize);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
}
|
||||
|
||||
p = MIDL_user_allocate(sizeof(LSAPR_POLICY_AUDIT_EVENTS_INFO));
|
||||
if (p == NULL)
|
||||
{
|
||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto done;
|
||||
}
|
||||
p = MIDL_user_allocate(sizeof(LSAPR_POLICY_AUDIT_EVENTS_INFO));
|
||||
if (p == NULL)
|
||||
{
|
||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (AuditData == NULL)
|
||||
{
|
||||
p->AuditingMode = FALSE;
|
||||
p->MaximumAuditEventCount = 0;
|
||||
p->EventAuditingOptions = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
p->AuditingMode = AuditData->AuditingMode;
|
||||
p->MaximumAuditEventCount = AuditData->MaximumAuditEventCount;
|
||||
|
||||
|
@ -128,19 +138,23 @@ LsarQueryAuditEvents(PLSA_DB_OBJECT PolicyObject,
|
|||
*PolicyInformation = (PLSAPR_POLICY_INFORMATION)p;
|
||||
|
||||
done:
|
||||
TRACE("Status: 0x%lx\n", Status);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
if (p->EventAuditingOptions != NULL)
|
||||
MIDL_user_free(p->EventAuditingOptions);
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
if (p->EventAuditingOptions != NULL)
|
||||
MIDL_user_free(p->EventAuditingOptions);
|
||||
|
||||
MIDL_user_free(p);
|
||||
}
|
||||
}
|
||||
|
||||
if (AuditData != NULL)
|
||||
MIDL_user_free(AuditData);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
|
@ -783,8 +797,37 @@ NTSTATUS
|
|||
LsarSetAuditEvents(PLSA_DB_OBJECT PolicyObject,
|
||||
PLSAPR_POLICY_AUDIT_EVENTS_INFO Info)
|
||||
{
|
||||
FIXME("\n");
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
PLSAP_POLICY_AUDIT_EVENTS_DATA AuditData = NULL;
|
||||
ULONG AttributeSize;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
TRACE("(%p %p)\n", PolicyObject, Info);
|
||||
|
||||
AttributeSize = sizeof(LSAP_POLICY_AUDIT_EVENTS_DATA) +
|
||||
Info->MaximumAuditEventCount * sizeof(DWORD);
|
||||
|
||||
AuditData = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
AttributeSize);
|
||||
if (AuditData == NULL)
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
AuditData->AuditingMode = Info->AuditingMode;
|
||||
AuditData->MaximumAuditEventCount = Info->MaximumAuditEventCount;
|
||||
|
||||
memcpy(&(AuditData->AuditEvents[0]),
|
||||
Info->EventAuditingOptions,
|
||||
Info->MaximumAuditEventCount * sizeof(DWORD));
|
||||
|
||||
Status = LsapSetObjectAttribute(PolicyObject,
|
||||
L"PolAdtEv",
|
||||
AuditData,
|
||||
AttributeSize);
|
||||
|
||||
if (AuditData != NULL)
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, AuditData);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue