summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2004-05-14 18:59:00 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:53:46 -0500
commit2bc3b3bcec7900cda3841af95ab08e07c3d26c9d (patch)
treee32f032dc9e7ad77d21d08f623f48b2444d5e829
parentb79455e0d24690f5bdb0fc3f78376f2249289f1c (diff)
downloadsamba-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.idl92
-rw-r--r--source4/torture/rpc/eventlog.c88
-rw-r--r--source4/torture/rpc/winreg.c1
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