summaryrefslogtreecommitdiff
path: root/source4/torture
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 /source4/torture
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)
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/rpc/eventlog.c88
-rw-r--r--source4/torture/rpc/winreg.c1
2 files changed, 81 insertions, 8 deletions
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