r739: Implement GetNumRecords() call from eventlog pipe, including a torture test
authorJelmer Vernooij <jelmer@samba.org>
Fri, 14 May 2004 18:59:00 +0000 (18:59 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:53:46 +0000 (12:53 -0500)
(This used to be commit 6a254e26f17c2b3175023764c02dc73615d585d6)

source4/librpc/idl/eventlog.idl
source4/torture/rpc/eventlog.c
source4/torture/rpc/winreg.c

index ee5bd8bba814e64c0e34415951a69d998df4578b..fbc3c233662f689b071fbbb559278c134af83a11 100644 (file)
                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
+                                                                 );
+
 }
index 1a3eb986ec717ab3342c82113c3f208d7c07b31a..85dfdcae317e4aae44b8a36889e2f88ef0e1ebdb 100644 (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;
 }
index ee67c8cc15a1c419b1348346276cfb7a88e55f44..c44237cca67c01667bb656fe2d72988c3ea5ae94 100644 (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