diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2004-05-14 18:59:00 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:53:46 -0500 |
commit | 2bc3b3bcec7900cda3841af95ab08e07c3d26c9d (patch) | |
tree | e32f032dc9e7ad77d21d08f623f48b2444d5e829 | |
parent | b79455e0d24690f5bdb0fc3f78376f2249289f1c (diff) | |
download | samba-2bc3b3bcec7900cda3841af95ab08e07c3d26c9d.tar.gz samba-2bc3b3bcec7900cda3841af95ab08e07c3d26c9d.tar.bz2 samba-2bc3b3bcec7900cda3841af95ab08e07c3d26c9d.zip |
r739: Implement GetNumRecords() call from eventlog pipe, including a torture test
(This used to be commit 6a254e26f17c2b3175023764c02dc73615d585d6)
-rw-r--r-- | source4/librpc/idl/eventlog.idl | 92 | ||||
-rw-r--r-- | source4/torture/rpc/eventlog.c | 88 | ||||
-rw-r--r-- | source4/torture/rpc/winreg.c | 1 |
3 files changed, 157 insertions, 24 deletions
diff --git a/source4/librpc/idl/eventlog.idl b/source4/librpc/idl/eventlog.idl index ee5bd8bba8..fbc3c23366 100644 --- a/source4/librpc/idl/eventlog.idl +++ b/source4/librpc/idl/eventlog.idl @@ -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 + ); + } diff --git a/source4/torture/rpc/eventlog.c b/source4/torture/rpc/eventlog.c index 1a3eb986ec..85dfdcae31 100644 --- a/source4/torture/rpc/eventlog.c +++ b/source4/torture/rpc/eventlog.c @@ -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; } diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c index ee67c8cc15..c44237cca6 100644 --- a/source4/torture/rpc/winreg.c +++ b/source4/torture/rpc/winreg.c @@ -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 |