mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
r739: Implement GetNumRecords() call from eventlog pipe, including a torture test
(This used to be commit 6a254e26f1
)
This commit is contained in:
parent
b79455e0d2
commit
2bc3b3bcec
@ -19,30 +19,90 @@
|
||||
unistr_noterm *name;
|
||||
} eventlog_String;
|
||||
|
||||
typedef struct {
|
||||
uint32 size;
|
||||
uint32 reserved;
|
||||
uint32 recordnumber;
|
||||
uint32 creationtime;
|
||||
uint32 writetime;
|
||||
uint32 eventnumber;
|
||||
uint16 eventtype;
|
||||
uint16 num_of_strings;
|
||||
uint16 category;
|
||||
uint16 reserved_flag;
|
||||
uint32 closingrecord;
|
||||
uint32 stringoffset;
|
||||
[size_is(num_of_strings)] eventlog_String bla[*];
|
||||
uint32 sid_length;
|
||||
[length_is(sid_length)] dom_sid *sids;
|
||||
uint32 data_length;
|
||||
[length_is(data_length)] uint8 *data;
|
||||
unistr *source_name;
|
||||
unistr *machine_name;
|
||||
} eventlog_Record;
|
||||
|
||||
/******************/
|
||||
/* Function: 0x00 */
|
||||
NTSTATUS eventlog_OpenEventLog(
|
||||
[in] eventlog_OpenUnknown0 *unknown0,
|
||||
[in] eventlog_String source,
|
||||
[in] eventlog_String unknown1,
|
||||
[in] uint32 unknown2,
|
||||
[in] uint32 unknown3,
|
||||
[out,ref] policy_handle *handle
|
||||
);
|
||||
NTSTATUS eventlog_Unknown0();
|
||||
|
||||
/******************/
|
||||
/* Function: 0x01 */
|
||||
NTSTATUS eventlog_GetNumRecords(
|
||||
);
|
||||
|
||||
NTSTATUS eventlog_Unknown1();
|
||||
|
||||
/******************/
|
||||
/* Function: 0x02 */
|
||||
NTSTATUS eventlog_ReadEventLog(
|
||||
);
|
||||
[id(3)] NTSTATUS eventlog_CloseEventLog(
|
||||
[in,out,ref] policy_handle *handle
|
||||
);
|
||||
|
||||
|
||||
/******************/
|
||||
/* Function: 0x03 */
|
||||
NTSTATUS eventlog_CloseEventLog(
|
||||
[in,out,ref] policy_handle *handle
|
||||
);
|
||||
NTSTATUS eventlog_Unknown3();
|
||||
|
||||
/******************/
|
||||
/* Function: 0x04 */
|
||||
NTSTATUS eventlog_GetNumRecords(
|
||||
[in,ref] policy_handle *handle,
|
||||
[out] uint32 number
|
||||
);
|
||||
/******************/
|
||||
/* Function: 0x05 */
|
||||
NTSTATUS eventlog_Unknown5();
|
||||
|
||||
/******************/
|
||||
/* Function: 0x06 */
|
||||
NTSTATUS eventlog_Unknown6();
|
||||
|
||||
/******************/
|
||||
/* Function: 0x07 */
|
||||
NTSTATUS eventlog_OpenEventLog(
|
||||
[in] eventlog_OpenUnknown0 *unknown0,
|
||||
[in] eventlog_String source,
|
||||
[in] eventlog_String unknown1,
|
||||
[in] uint32 unknown2,
|
||||
[in] uint32 unknown3,
|
||||
[out,ref] policy_handle *handle
|
||||
);
|
||||
|
||||
/******************/
|
||||
/* Function: 0x08 */
|
||||
NTSTATUS eventlog_Unknown8();
|
||||
|
||||
/******************/
|
||||
/* Function: 0x09 */
|
||||
NTSTATUS eventlog_Unknowna();
|
||||
|
||||
/******************/
|
||||
/* Function: 0x0a */
|
||||
NTSTATUS eventlog_ReadEventLog(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 flags,
|
||||
[in] uint32 offset,
|
||||
[in,out] uint32 number_of_bytes,
|
||||
[out,size_is(number_of_bytes),ref] uint8 *data,
|
||||
[out] uint32 sent_size,
|
||||
[out] uint32 real_size
|
||||
);
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
test suite for eventlog rpc operations
|
||||
|
||||
Copyright (C) Tim Potter 2003
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -28,6 +29,69 @@ static void init_eventlog_String(struct eventlog_String *name, const char *s)
|
||||
name->name_size = name->name_len;
|
||||
}
|
||||
|
||||
static BOOL test_GetNumRecords(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle)
|
||||
{
|
||||
NTSTATUS status;
|
||||
struct eventlog_GetNumRecords r;
|
||||
|
||||
printf("\ntesting GetNumRecords\n");
|
||||
|
||||
r.in.handle = handle;
|
||||
|
||||
status = dcerpc_eventlog_GetNumRecords(p, mem_ctx, &r);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("GetNumRecords failed - %s\n", nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
|
||||
printf("%d records\n", r.out.number);
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
static BOOL test_ReadEventLog(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle, uint32 offset)
|
||||
{
|
||||
NTSTATUS status;
|
||||
struct eventlog_ReadEventLog r;
|
||||
|
||||
printf("\ntesting ReadEventLog\n");
|
||||
|
||||
r.in.flags = 0x0;
|
||||
r.in.offset = offset;
|
||||
r.in.handle = handle;
|
||||
r.in.number_of_bytes = 0x0;
|
||||
|
||||
status = dcerpc_eventlog_ReadEventLog(p, mem_ctx, &r);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("ReadEventLog failed - %s\n", nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
|
||||
if (NT_STATUS_IS_OK(r.out.result)) {
|
||||
/* No data */
|
||||
return True;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_EQUAL(r.out.result, NT_STATUS_BUFFER_TOO_SMALL)) {
|
||||
printf("ReadEventLog failed - %s\n", nt_errstr(r.out.result));
|
||||
return False;
|
||||
}
|
||||
|
||||
r.in.number_of_bytes = r.out.real_size;
|
||||
|
||||
status = dcerpc_eventlog_ReadEventLog(p, mem_ctx, &r);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("ReadEventLog failed - %s\n", nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
BOOL test_CloseEventLog(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
struct policy_handle *handle)
|
||||
{
|
||||
@ -47,12 +111,11 @@ BOOL test_CloseEventLog(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
return True;
|
||||
}
|
||||
|
||||
static BOOL test_OpenEventLog(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
|
||||
static BOOL test_OpenEventLog(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle)
|
||||
{
|
||||
NTSTATUS status;
|
||||
struct eventlog_OpenEventLog r;
|
||||
struct eventlog_OpenUnknown0 unknown0;
|
||||
struct policy_handle handle;
|
||||
|
||||
printf("\ntesting OpenEventLog\n");
|
||||
|
||||
@ -64,7 +127,7 @@ static BOOL test_OpenEventLog(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
|
||||
init_eventlog_String(&r.in.unknown1, NULL);
|
||||
r.in.unknown2 = 0x00000001;
|
||||
r.in.unknown3 = 0x00000001;
|
||||
r.out.handle = &handle;
|
||||
r.out.handle = handle;
|
||||
|
||||
status = dcerpc_eventlog_OpenEventLog(p, mem_ctx, &r);
|
||||
|
||||
@ -73,16 +136,19 @@ static BOOL test_OpenEventLog(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!test_CloseEventLog(p, mem_ctx, &handle))
|
||||
if (!NT_STATUS_IS_OK(r.out.result)) {
|
||||
printf("OpenEventLog failed - %s\n", nt_errstr(r.out.result));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
BOOL torture_rpc_eventlog(int dummy)
|
||||
{
|
||||
NTSTATUS status;
|
||||
struct dcerpc_pipe *p;
|
||||
NTSTATUS status;
|
||||
struct dcerpc_pipe *p;
|
||||
struct policy_handle handle;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
BOOL ret = True;
|
||||
|
||||
@ -96,13 +162,19 @@ BOOL torture_rpc_eventlog(int dummy)
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!test_OpenEventLog(p, mem_ctx)) {
|
||||
if (!test_OpenEventLog(p, mem_ctx, &handle)) {
|
||||
return False;
|
||||
}
|
||||
|
||||
test_GetNumRecords(p, mem_ctx, &handle);
|
||||
|
||||
test_ReadEventLog(p, mem_ctx, &handle, 0);
|
||||
|
||||
test_CloseEventLog(p, mem_ctx, &handle);
|
||||
|
||||
talloc_destroy(mem_ctx);
|
||||
|
||||
torture_rpc_close(p);
|
||||
torture_rpc_close(p);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
test suite for winreg rpc operations
|
||||
|
||||
Copyright (C) Tim Potter 2003
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
Loading…
Reference in New Issue
Block a user