1
0
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:
Jelmer Vernooij 2004-05-14 18:59:00 +00:00 committed by Gerald (Jerry) Carter
parent b79455e0d2
commit 2bc3b3bcec
3 changed files with 157 additions and 24 deletions

View File

@ -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
);
}

View File

@ -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;
}

View File

@ -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