[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha5-335-g4b054ce

Stefan Metzmacher metze at samba.org
Wed Aug 20 13:30:06 GMT 2008


The branch, v4-0-test has been updated
       via  4b054cee51c39c5430bcadd5c06a94dc3e6b0d8f (commit)
       via  4e6937816f1563686d04da4ab00a46d4461401b9 (commit)
       via  70a7b1f6c2e359102467ea270c2bb1efe736f64a (commit)
      from  925a2066ffa18a86704a8ee1a7a6908e0cd65a2a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit 4b054cee51c39c5430bcadd5c06a94dc3e6b0d8f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 19 10:36:24 2008 +0200

    drsuapi: fix samba4 callers after drsuapi.idl changes
    
    metze

commit 4e6937816f1563686d04da4ab00a46d4461401b9
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 19 10:35:15 2008 +0200

    drsuapi.idl: readd type serialization headers to compressed DsGetNCChangesCtr*
    
    metze

commit 70a7b1f6c2e359102467ea270c2bb1efe736f64a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 19 10:33:03 2008 +0200

    ndr_compression: remove the type serialization handling from the compression layer
    
    metze

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

Summary of changes:
 source/dsdb/repl/drepl_out_helpers.c |   20 +++++++++++++-----
 source/libnet/libnet_become_dc.c     |   19 ++++++++++++-----
 source/librpc/idl/drsuapi.idl        |   16 +++++++++++---
 source/librpc/ndr/ndr_compression.c  |   36 ----------------------------------
 source/torture/rpc/dssync.c          |   15 ++++++++-----
 5 files changed, 48 insertions(+), 58 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/dsdb/repl/drepl_out_helpers.c b/source/dsdb/repl/drepl_out_helpers.c
index 3629a3b..80b398e 100644
--- a/source/dsdb/repl/drepl_out_helpers.c
+++ b/source/dsdb/repl/drepl_out_helpers.c
@@ -314,27 +314,35 @@ static void dreplsrv_op_pull_source_get_changes_recv(struct rpc_request *req)
 	if (*r->out.level == 1) {
 		ctr_level = 1;
 		ctr1 = &r->out.ctr.ctr1;
-	} else if (*r->out.level == 2) {
+	} else if (*r->out.level == 2 &&
+		   r->out.ctr.ctr2.mszip1.ts) {
 		ctr_level = 1;
-		ctr1 = r->out.ctr.ctr2.mszip1.ctr1;
+		ctr1 = &r->out.ctr.ctr2.mszip1.ts->ctr1;
 	} else if (*r->out.level == 6) {
 		ctr_level = 6;
 		ctr6 = &r->out.ctr.ctr6;
 	} else if (*r->out.level == 7 &&
 		   r->out.ctr.ctr7.level == 6 &&
-		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP) {
+		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP &&
+		   r->out.ctr.ctr7.ctr.mszip6.ts) {
 		ctr_level = 6;
-		ctr6 = r->out.ctr.ctr7.ctr.mszip6.ctr6;
+		ctr6 = &r->out.ctr.ctr7.ctr.mszip6.ts->ctr6;
 	} else if (*r->out.level == 7 &&
 		   r->out.ctr.ctr7.level == 6 &&
-		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS) {
+		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS &&
+		   r->out.ctr.ctr7.ctr.xpress6.ts) {
 		ctr_level = 6;
-		ctr6 = r->out.ctr.ctr7.ctr.xpress6.ctr6;
+		ctr6 = &r->out.ctr.ctr7.ctr.xpress6.ts->ctr6;
 	} else {
 		composite_error(c, werror_to_ntstatus(WERR_BAD_NET_RESP));
 		return;
 	}
 
+	if (!ctr1 && !ctr6) {
+		composite_error(c, werror_to_ntstatus(WERR_BAD_NET_RESP));
+		return;
+	}
+
 	if (ctr_level == 6) {
 		if (!W_ERROR_IS_OK(ctr6->drs_error)) {
 			composite_error(c, werror_to_ntstatus(ctr6->drs_error));
diff --git a/source/libnet/libnet_become_dc.c b/source/libnet/libnet_become_dc.c
index 19391e7..332b041 100644
--- a/source/libnet/libnet_become_dc.c
+++ b/source/libnet/libnet_become_dc.c
@@ -2465,26 +2465,33 @@ static WERROR becomeDC_drsuapi_pull_partition_recv(struct libnet_BecomeDC_state
 	if (*r->out.level == 1) {
 		ctr_level = 1;
 		ctr1 = &r->out.ctr.ctr1;
-	} else if (*r->out.level == 2) {
+	} else if (*r->out.level == 2 &&
+		   r->out.ctr.ctr2.mszip1.ts) {
 		ctr_level = 1;
-		ctr1 = r->out.ctr.ctr2.mszip1.ctr1;
+		ctr1 = &r->out.ctr.ctr2.mszip1.ts->ctr1;
 	} else if (*r->out.level == 6) {
 		ctr_level = 6;
 		ctr6 = &r->out.ctr.ctr6;
 	} else if (*r->out.level == 7 &&
 		   r->out.ctr.ctr7.level == 6 &&
-		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP) {
+		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP &&
+		   r->out.ctr.ctr7.ctr.mszip6.ts) {
 		ctr_level = 6;
-		ctr6 = r->out.ctr.ctr7.ctr.mszip6.ctr6;
+		ctr6 = &r->out.ctr.ctr7.ctr.mszip6.ts->ctr6;
 	} else if (*r->out.level == 7 &&
 		   r->out.ctr.ctr7.level == 6 &&
-		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS) {
+		   r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS &&
+		   r->out.ctr.ctr7.ctr.xpress6.ts) {
 		ctr_level = 6;
-		ctr6 = r->out.ctr.ctr7.ctr.xpress6.ctr6;
+		ctr6 = &r->out.ctr.ctr7.ctr.xpress6.ts->ctr6;
 	} else {
 		return WERR_BAD_NET_RESP;
 	}
 
+	if (!ctr1 && ! ctr6) {
+		return WERR_BAD_NET_RESP;
+	}
+
 	if (ctr_level == 6) {
 		if (!W_ERROR_IS_OK(ctr6->drs_error)) {
 			return ctr6->drs_error;
diff --git a/source/librpc/idl/drsuapi.idl b/source/librpc/idl/drsuapi.idl
index 88d2126..b929bb0 100644
--- a/source/librpc/idl/drsuapi.idl
+++ b/source/librpc/idl/drsuapi.idl
@@ -618,11 +618,19 @@ interface drsuapi
 	} drsuapi_DsGetNCChangesCtr6;
 
 	typedef struct {
+		[subcontext(0xFFFFFC01)] drsuapi_DsGetNCChangesCtr1 ctr1;
+	} drsuapi_DsGetNCChangesCtr1TS;
+
+	typedef struct {
+		[subcontext(0xFFFFFC01)] drsuapi_DsGetNCChangesCtr6 ctr6;
+	} drsuapi_DsGetNCChangesCtr6TS;
+
+	typedef struct {
 		uint32 decompressed_length;
 		uint32 compressed_length;
 		[subcontext(4),subcontext_size(compressed_length),
 		 compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
-		 drsuapi_DsGetNCChangesCtr1 *ctr1;
+		 drsuapi_DsGetNCChangesCtr1TS *ts;
 	} drsuapi_DsGetNCChangesMSZIPCtr1;
 
 	typedef struct {
@@ -630,7 +638,7 @@ interface drsuapi
 		uint32 compressed_length;
 		[subcontext(4),subcontext_size(compressed_length),
 		 compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)]
-		 drsuapi_DsGetNCChangesCtr6 *ctr6;
+		 drsuapi_DsGetNCChangesCtr6TS *ts;
 	} drsuapi_DsGetNCChangesMSZIPCtr6;
 
 	typedef struct {
@@ -638,7 +646,7 @@ interface drsuapi
 		uint32 compressed_length;
 		[subcontext(4),subcontext_size(compressed_length),
 		 compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length)]
-		 drsuapi_DsGetNCChangesCtr1 *ctr1;
+		 drsuapi_DsGetNCChangesCtr1TS *ts;
 	} drsuapi_DsGetNCChangesXPRESSCtr1;
 
 	typedef struct {
@@ -646,7 +654,7 @@ interface drsuapi
 		uint32 compressed_length;
 		[subcontext(4),subcontext_size(compressed_length),
 		 compression(NDR_COMPRESSION_XPRESS,compressed_length,decompressed_length)]
-		 drsuapi_DsGetNCChangesCtr6 *ctr6;
+		 drsuapi_DsGetNCChangesCtr6TS *ts;
 	} drsuapi_DsGetNCChangesXPRESSCtr6;
 
 	typedef [enum16bit] enum {
diff --git a/source/librpc/ndr/ndr_compression.c b/source/librpc/ndr/ndr_compression.c
index ad8dda1..f6de0a1 100644
--- a/source/librpc/ndr/ndr_compression.c
+++ b/source/librpc/ndr/ndr_compression.c
@@ -212,10 +212,6 @@ enum ndr_err_code ndr_pull_compression_start(struct ndr_pull *subndr,
 	struct ndr_push *ndrpush;
 	struct ndr_pull *comndr;
 	DATA_BLOB uncompressed;
-	uint32_t payload_header[4];
-	uint32_t payload_size;
-	uint32_t payload_offset;
-	uint8_t *payload;
 	bool last = false;
 	z_stream z;
 
@@ -261,38 +257,6 @@ enum ndr_err_code ndr_pull_compression_start(struct ndr_pull *subndr,
 
 	comndr->iconv_convenience = talloc_reference(comndr, subndr->iconv_convenience);
 
-	NDR_CHECK(ndr_pull_uint32(comndr, NDR_SCALARS, &payload_header[0]));
-	NDR_CHECK(ndr_pull_uint32(comndr, NDR_SCALARS, &payload_header[1]));
-	NDR_CHECK(ndr_pull_uint32(comndr, NDR_SCALARS, &payload_header[2]));
-	NDR_CHECK(ndr_pull_uint32(comndr, NDR_SCALARS, &payload_header[3]));
-
-	if (payload_header[0] != 0x00081001) {
-		return ndr_pull_error(subndr, NDR_ERR_COMPRESSION,
-				      "Bad XPRESS payload_header[0] [0x%08X] != [0x00081001] (PULL)",
-				      payload_header[0]);
-	}
-	if (payload_header[1] != 0xCCCCCCCC) {
-		return ndr_pull_error(subndr, NDR_ERR_COMPRESSION,
-				      "Bad XPRESS payload_header[1] [0x%08X] != [0xCCCCCCCC] (PULL)",
-				      payload_header[1]);
-	}
-
-	payload_size = payload_header[2];
-
-	if (payload_header[3] != 0x00000000) {
-		return ndr_pull_error(subndr, NDR_ERR_COMPRESSION,
-				      "Bad XPRESS payload_header[3] [0x%08X] != [0x00000000] (PULL)",
-				      payload_header[3]);
-	}
-
-	payload_offset = comndr->offset;
-	NDR_CHECK(ndr_pull_advance(comndr, payload_size));
-	payload = comndr->data + payload_offset;
-
-	comndr->data		= payload;
-	comndr->data_size	= payload_size;
-	comndr->offset		= 0;
-
 	*_comndr = comndr;
 	return NDR_ERR_SUCCESS;
 }
diff --git a/source/torture/rpc/dssync.c b/source/torture/rpc/dssync.c
index 2739081..e9346f9 100644
--- a/source/torture/rpc/dssync.c
+++ b/source/torture/rpc/dssync.c
@@ -747,9 +747,10 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
 			if (ret == true && *r.out.level == 1) {
 				out_level = 1;
 				ctr1 = &r.out.ctr.ctr1;
-			} else if (ret == true && *r.out.level == 2) {
+			} else if (ret == true && *r.out.level == 2 &&
+				   r.out.ctr.ctr2.mszip1.ts) {
 				out_level = 1;
-				ctr1 = r.out.ctr.ctr2.mszip1.ctr1;
+				ctr1 = &r.out.ctr.ctr2.mszip1.ts->ctr1;
 			}
 
 			if (out_level == 1) {
@@ -770,14 +771,16 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
 				ctr6 = &r.out.ctr.ctr6;
 			} else if (ret == true && *r.out.level == 7
 				   && r.out.ctr.ctr7.level == 6
-				   && r.out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP) {
+				   && r.out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP
+				   && r.out.ctr.ctr7.ctr.mszip6.ts) {
 				out_level = 6;
-				ctr6 = r.out.ctr.ctr7.ctr.mszip6.ctr6;
+				ctr6 = &r.out.ctr.ctr7.ctr.mszip6.ts->ctr6;
 			} else if (ret == true && *r.out.level == 7
 				   && r.out.ctr.ctr7.level == 6
-				   && r.out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS) {
+				   && r.out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS
+				   && r.out.ctr.ctr7.ctr.xpress6.ts) {
 				out_level = 6;
-				ctr6 = r.out.ctr.ctr7.ctr.xpress6.ctr6;
+				ctr6 = &r.out.ctr.ctr7.ctr.xpress6.ts->ctr6;
 			}
 
 			if (out_level == 6) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list