[SCM] Samba Shared Repository - branch master updated - 03f3c65ce439983c0941eba11d69b75c5fa39311

Günther Deschner gd at samba.org
Mon Jan 12 17:05:21 GMT 2009


The branch, master has been updated
       via  03f3c65ce439983c0941eba11d69b75c5fa39311 (commit)
       via  4561721cc3b4e45d953e0cdb7cca422fe0fa3b0d (commit)
       via  6b80e9be6425e342b73859dd68655444dc49c56c (commit)
       via  9df76c4efb8a35f2c466e514521a1e7e3dde2ce9 (commit)
      from  7d9fd64f38aa5821b38c1223cf87979fc87bfb71 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 03f3c65ce439983c0941eba11d69b75c5fa39311
Author: Günther Deschner <gd at samba.org>
Date:   Mon Jan 12 18:00:33 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 4561721cc3b4e45d953e0cdb7cca422fe0fa3b0d
Author: Günther Deschner <gd at samba.org>
Date:   Mon Jan 12 16:16:24 2009 +0100

    s3-rpcclient: some cleanup for eventlog client.
    
    Guenther

commit 6b80e9be6425e342b73859dd68655444dc49c56c
Author: Günther Deschner <gd at samba.org>
Date:   Mon Jan 12 13:45:38 2009 +0100

    eventlog: some fixes for eventlog_Record struct.
    
    * make reserved field always have value 0x654c664C ("eLfL").
    * add missing sid entry
    * add padding and 2nd size counter.
    * use time_t in eventlog_Record.
    
    Guenther

commit 9df76c4efb8a35f2c466e514521a1e7e3dde2ce9
Author: Günther Deschner <gd at samba.org>
Date:   Mon Jan 12 13:45:04 2009 +0100

    eventlog: make out pointer a ref pointer in eventlog_GetNumRecords.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 librpc/gen_ndr/eventlog.h        |   11 +++++---
 librpc/gen_ndr/ndr_eventlog.c    |   51 +++++++++++++++++++++++++++++--------
 librpc/idl/eventlog.idl          |   13 ++++++---
 source3/rpcclient/cmd_eventlog.c |   35 +++++++++++++++++++------
 4 files changed, 81 insertions(+), 29 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/eventlog.h b/librpc/gen_ndr/eventlog.h
index 76b9e86..805364b 100644
--- a/librpc/gen_ndr/eventlog.h
+++ b/librpc/gen_ndr/eventlog.h
@@ -28,10 +28,10 @@ struct eventlog_OpenUnknown0 {
 
 struct eventlog_Record {
 	uint32_t size;
-	uint32_t reserved;
+	uint32_t reserved;/* [value(0x654c664C)] */
 	uint32_t record_number;
-	uint32_t time_generated;
-	uint32_t time_written;
+	time_t time_generated;
+	time_t time_written;
 	uint32_t event_id;
 	uint16_t event_type;
 	uint16_t num_of_strings;
@@ -39,14 +39,17 @@ struct eventlog_Record {
 	uint16_t reserved_flags;
 	uint32_t closing_record_number;
 	uint32_t stringoffset;
-	uint32_t sid_length;
+	uint32_t sid_size;/* [value(ndr_size_dom_sid0(&sid,ndr->flags))] */
 	uint32_t sid_offset;
 	uint32_t data_length;
 	uint32_t data_offset;
 	const char * source_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
 	const char * computer_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
+	struct dom_sid0 sid;/* [subcontext_size(sid_size),subcontext(0)] */
 	const char * *strings;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
 	const char * raw_data;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
+	DATA_BLOB _padding;/* [flag(LIBNDR_FLAG_ALIGN4)] */
+	uint32_t size2;/* [value(size)] */
 }/* [public] */;
 
 
diff --git a/librpc/gen_ndr/ndr_eventlog.c b/librpc/gen_ndr/ndr_eventlog.c
index 6116434..5d1bda5 100644
--- a/librpc/gen_ndr/ndr_eventlog.c
+++ b/librpc/gen_ndr/ndr_eventlog.c
@@ -69,10 +69,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_eventlog_Record(struct ndr_push *ndr, int nd
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->reserved));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0x654c664C));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->record_number));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time_generated));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time_written));
+		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->time_generated));
+		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->time_written));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->event_id));
 		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->event_type));
 		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->num_of_strings));
@@ -80,7 +80,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_eventlog_Record(struct ndr_push *ndr, int nd
 		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->reserved_flags));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->closing_record_number));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->stringoffset));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_length));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_dom_sid0(&r->sid, ndr->flags)));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_offset));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->data_length));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->data_offset));
@@ -97,6 +97,12 @@ _PUBLIC_ enum ndr_err_code ndr_push_eventlog_Record(struct ndr_push *ndr, int nd
 			ndr->flags = _flags_save_string;
 		}
 		{
+			struct ndr_push *_ndr_sid;
+			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_sid, 0, ndr_size_dom_sid0(&r->sid, ndr->flags)));
+			NDR_CHECK(ndr_push_dom_sid0(_ndr_sid, NDR_SCALARS|NDR_BUFFERS, &r->sid));
+			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_sid, 0, ndr_size_dom_sid0(&r->sid, ndr->flags)));
+		}
+		{
 			uint32_t _flags_save_string = ndr->flags;
 			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
 			for (cntr_strings_0 = 0; cntr_strings_0 < r->num_of_strings; cntr_strings_0++) {
@@ -110,6 +116,13 @@ _PUBLIC_ enum ndr_err_code ndr_push_eventlog_Record(struct ndr_push *ndr, int nd
 			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->raw_data));
 			ndr->flags = _flags_save_string;
 		}
+		{
+			uint32_t _flags_save_DATA_BLOB = ndr->flags;
+			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->_padding));
+			ndr->flags = _flags_save_DATA_BLOB;
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -125,8 +138,8 @@ _PUBLIC_ enum ndr_err_code ndr_pull_eventlog_Record(struct ndr_pull *ndr, int nd
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reserved));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->record_number));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_generated));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_written));
+		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->time_generated));
+		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->time_written));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->event_id));
 		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->event_type));
 		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->num_of_strings));
@@ -134,7 +147,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_eventlog_Record(struct ndr_pull *ndr, int nd
 		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->reserved_flags));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->closing_record_number));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->stringoffset));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_length));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_size));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_offset));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->data_length));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->data_offset));
@@ -151,6 +164,12 @@ _PUBLIC_ enum ndr_err_code ndr_pull_eventlog_Record(struct ndr_pull *ndr, int nd
 			ndr->flags = _flags_save_string;
 		}
 		{
+			struct ndr_pull *_ndr_sid;
+			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_sid, 0, r->sid_size));
+			NDR_CHECK(ndr_pull_dom_sid0(_ndr_sid, NDR_SCALARS|NDR_BUFFERS, &r->sid));
+			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_sid, 0, r->sid_size));
+		}
+		{
 			uint32_t _flags_save_string = ndr->flags;
 			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
 			NDR_PULL_ALLOC_N(ndr, r->strings, r->num_of_strings);
@@ -168,6 +187,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_eventlog_Record(struct ndr_pull *ndr, int nd
 			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->raw_data));
 			ndr->flags = _flags_save_string;
 		}
+		{
+			uint32_t _flags_save_DATA_BLOB = ndr->flags;
+			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->_padding));
+			ndr->flags = _flags_save_DATA_BLOB;
+		}
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size2));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -180,10 +206,10 @@ _PUBLIC_ void ndr_print_eventlog_Record(struct ndr_print *ndr, const char *name,
 	ndr_print_struct(ndr, name, "eventlog_Record");
 	ndr->depth++;
 	ndr_print_uint32(ndr, "size", r->size);
-	ndr_print_uint32(ndr, "reserved", r->reserved);
+	ndr_print_uint32(ndr, "reserved", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0x654c664C:r->reserved);
 	ndr_print_uint32(ndr, "record_number", r->record_number);
-	ndr_print_uint32(ndr, "time_generated", r->time_generated);
-	ndr_print_uint32(ndr, "time_written", r->time_written);
+	ndr_print_time_t(ndr, "time_generated", r->time_generated);
+	ndr_print_time_t(ndr, "time_written", r->time_written);
 	ndr_print_uint32(ndr, "event_id", r->event_id);
 	ndr_print_uint16(ndr, "event_type", r->event_type);
 	ndr_print_uint16(ndr, "num_of_strings", r->num_of_strings);
@@ -191,12 +217,13 @@ _PUBLIC_ void ndr_print_eventlog_Record(struct ndr_print *ndr, const char *name,
 	ndr_print_uint16(ndr, "reserved_flags", r->reserved_flags);
 	ndr_print_uint32(ndr, "closing_record_number", r->closing_record_number);
 	ndr_print_uint32(ndr, "stringoffset", r->stringoffset);
-	ndr_print_uint32(ndr, "sid_length", r->sid_length);
+	ndr_print_uint32(ndr, "sid_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_dom_sid0(&r->sid, ndr->flags):r->sid_size);
 	ndr_print_uint32(ndr, "sid_offset", r->sid_offset);
 	ndr_print_uint32(ndr, "data_length", r->data_length);
 	ndr_print_uint32(ndr, "data_offset", r->data_offset);
 	ndr_print_string(ndr, "source_name", r->source_name);
 	ndr_print_string(ndr, "computer_name", r->computer_name);
+	ndr_print_dom_sid0(ndr, "sid", &r->sid);
 	ndr->print(ndr, "%s: ARRAY(%d)", "strings", (int)r->num_of_strings);
 	ndr->depth++;
 	for (cntr_strings_0=0;cntr_strings_0<r->num_of_strings;cntr_strings_0++) {
@@ -208,6 +235,8 @@ _PUBLIC_ void ndr_print_eventlog_Record(struct ndr_print *ndr, const char *name,
 	}
 	ndr->depth--;
 	ndr_print_string(ndr, "raw_data", r->raw_data);
+	ndr_print_DATA_BLOB(ndr, "_padding", r->_padding);
+	ndr_print_uint32(ndr, "size2", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->size:r->size2);
 	ndr->depth--;
 }
 
diff --git a/librpc/idl/eventlog.idl b/librpc/idl/eventlog.idl
index bab4cb9..584d671 100644
--- a/librpc/idl/eventlog.idl
+++ b/librpc/idl/eventlog.idl
@@ -34,10 +34,10 @@ import "lsa.idl", "security.idl";
 	
 	typedef [public] struct { 
 		uint32 size;
-		uint32 reserved;
+		[value(0x654c664C)] uint32 reserved; /* "eLfL" */
 		uint32 record_number;
-		uint32 time_generated;
-		uint32 time_written;
+		time_t time_generated;
+		time_t time_written;
 		uint32 event_id;
 		uint16 event_type;
 		uint16 num_of_strings;
@@ -45,14 +45,17 @@ import "lsa.idl", "security.idl";
 		uint16 reserved_flags;
 		uint32 closing_record_number;
 		uint32 stringoffset;
-		uint32 sid_length;
+		[value(ndr_size_dom_sid0(&sid, ndr->flags))] uint32 sid_size;
 		uint32 sid_offset;
 		uint32 data_length;
 		uint32 data_offset;
 		nstring source_name;
 		nstring computer_name;
+		[subcontext(0),subcontext_size(sid_size)] dom_sid0 sid;
 		nstring strings[num_of_strings];
 		astring raw_data;
+		[flag(NDR_ALIGN4)] DATA_BLOB _padding;
+		[value(size)] uint32 size2;
 	} eventlog_Record;
 
 	/******************/
@@ -80,7 +83,7 @@ import "lsa.idl", "security.idl";
 	/* Function: 0x04 */
 	NTSTATUS eventlog_GetNumRecords(
 		[in] policy_handle *handle,
-		[out] uint32 *number
+		[out,ref] uint32 *number
 	);
 
 	/******************/
diff --git a/source3/rpcclient/cmd_eventlog.c b/source3/rpcclient/cmd_eventlog.c
index a6254da..2dcb72a 100644
--- a/source3/rpcclient/cmd_eventlog.c
+++ b/source3/rpcclient/cmd_eventlog.c
@@ -66,11 +66,15 @@ static NTSTATUS cmd_eventlog_readlog(struct rpc_pipe_client *cli,
 	uint32_t sent_size = 0;
 	uint32_t real_size = 0;
 
-	if (argc != 2) {
-		printf("Usage: %s logname\n", argv[0]);
+	if (argc < 2 || argc > 4) {
+		printf("Usage: %s logname [offset]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
+	if (argc >= 3) {
+		offset = atoi(argv[2]);
+	}
+
 	status = get_eventlog_handle(cli, mem_ctx, argv[1], &handle);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
@@ -85,14 +89,17 @@ static NTSTATUS cmd_eventlog_readlog(struct rpc_pipe_client *cli,
 						       data,
 						       &sent_size,
 						       &real_size);
-		if (NT_STATUS_EQUAL(status, NT_STATUS_BUFFER_TOO_SMALL)) {
+		if (NT_STATUS_EQUAL(status, NT_STATUS_BUFFER_TOO_SMALL) &&
+		    real_size > 0 ) {
 			number_of_bytes = real_size;
 			data = talloc_array(mem_ctx, uint8_t, real_size);
 			continue;
 		}
 
+		number_of_bytes = 0;
+
 		if (!NT_STATUS_IS_OK(status)) {
-			return status;
+			goto done;
 		}
 
 		{
@@ -106,7 +113,8 @@ static NTSTATUS cmd_eventlog_readlog(struct rpc_pipe_client *cli,
 						       &rec,
 						       (ndr_pull_flags_fn_t)ndr_pull_eventlog_Record);
 			if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-				return ndr_map_error2ntstatus(ndr_err);
+				status = ndr_map_error2ntstatus(ndr_err);
+				goto done;
 			}
 
 			NDR_PRINT_DEBUG(eventlog_Record, &rec);
@@ -115,6 +123,9 @@ static NTSTATUS cmd_eventlog_readlog(struct rpc_pipe_client *cli,
 		offset++;
 	}
 
+ done:
+	rpccli_eventlog_CloseEventLog(cli, mem_ctx, &handle);
+
 	return status;
 }
 
@@ -141,12 +152,15 @@ static NTSTATUS cmd_eventlog_numrecords(struct rpc_pipe_client *cli,
 					       &handle,
 					       &number);
 	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		goto done;
 	}
 
 	printf("number of records: %d\n", number);
 
-	return NT_STATUS_OK;
+ done:
+	rpccli_eventlog_CloseEventLog(cli, mem_ctx, &handle);
+
+	return status;
 }
 
 static NTSTATUS cmd_eventlog_oldestrecord(struct rpc_pipe_client *cli,
@@ -172,12 +186,15 @@ static NTSTATUS cmd_eventlog_oldestrecord(struct rpc_pipe_client *cli,
 						 &handle,
 						 &oldest_entry);
 	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		goto done;
 	}
 
 	printf("oldest entry: %d\n", oldest_entry);
 
-	return NT_STATUS_OK;
+ done:
+	rpccli_eventlog_CloseEventLog(cli, mem_ctx, &handle);
+
+	return status;
 }
 
 struct cmd_set eventlog_commands[] = {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list