From 2bc3b3bcec7900cda3841af95ab08e07c3d26c9d Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 14 May 2004 18:59:00 +0000 Subject: r739: Implement GetNumRecords() call from eventlog pipe, including a torture test (This used to be commit 6a254e26f17c2b3175023764c02dc73615d585d6) --- source4/torture/rpc/eventlog.c | 88 ++++++++++++++++++++++++++++++++++++++---- source4/torture/rpc/winreg.c | 1 + 2 files changed, 81 insertions(+), 8 deletions(-) (limited to 'source4/torture/rpc') 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 -- cgit