[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Mon Mar 24 14:47:03 MDT 2014


The branch, master has been updated
       via  95d9f16 librpc: inline CHECK_SYNTAX macro logic
       via  5ccecec librpc: inline VT CHECK macro logic
       via  ba2db53 librpc: split type specific VT checks into helpers
       via  11054a6 librpc: dump correct ndr_syntax_id on VT check failure
      from  74b359c s3:build: remove global CLUSTER_SUPPORT define

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


- Log -----------------------------------------------------------------
commit 95d9f163625b99687fc996edd829373034941dd9
Author: David Disseldorp <ddiss at samba.org>
Date:   Mon Mar 24 16:46:10 2014 +0100

    librpc: inline CHECK_SYNTAX macro logic
    
    The CHECK_SYNTAX macro is currently used to compare ndr_syntax_ids and
    return false on mismatch. Macros affecting control flow are evil!
    
    Signed-off-by: David Disseldorp <ddiss at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Mon Mar 24 21:46:39 CET 2014 on sn-devel-104

commit 5ccecec3ca5068f39194a1472ae492c06cf3213a
Author: David Disseldorp <ddiss at samba.org>
Date:   Mon Mar 24 16:46:09 2014 +0100

    librpc: inline VT CHECK macro logic
    
    The CHECK macro is currently used to dump error and return false on
    VT condition check failure. Macros affecting control flow are evil!
    
    Signed-off-by: David Disseldorp <ddiss at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit ba2db53097a7f6c97d0cb67761459ffd9ceffe85
Author: David Disseldorp <ddiss at samba.org>
Date:   Mon Mar 24 16:46:08 2014 +0100

    librpc: split type specific VT checks into helpers
    
    Signed-off-by: David Disseldorp <ddiss at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 11054a699a666bc35a46c3f0c2df4fb1ae660aa8
Author: David Disseldorp <ddiss at samba.org>
Date:   Mon Mar 24 16:46:07 2014 +0100

    librpc: dump correct ndr_syntax_id on VT check failure
    
    Signed-off-by: David Disseldorp <ddiss at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 librpc/rpc/dcerpc_util.c |  148 +++++++++++++++++++++++++++++++---------------
 1 files changed, 101 insertions(+), 47 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/rpc/dcerpc_util.c b/librpc/rpc/dcerpc_util.c
index 792848f..a4dd569 100644
--- a/librpc/rpc/dcerpc_util.c
+++ b/librpc/rpc/dcerpc_util.c
@@ -513,26 +513,93 @@ done:
 	return ret;
 }
 
-#define CHECK(msg, ok)						\
-do {								\
-	if (!ok) {						\
-		DEBUG(10, ("SEC_VT check %s failed\n", msg));	\
-		return false;					\
-	}							\
-} while(0)
-
-#define CHECK_SYNTAX(msg, s1, s2)					\
-do {								\
-	if (!ndr_syntax_id_equal(&s1, &s2)) {				\
-		TALLOC_CTX *frame = talloc_stackframe();		\
-		DEBUG(10, ("SEC_VT check %s failed: %s vs. %s\n", msg,	\
-			   ndr_syntax_id_to_string(frame, &s1),		\
-			   ndr_syntax_id_to_string(frame, &s1)));	\
-		TALLOC_FREE(frame);					\
-		return false;						\
-	}								\
-} while(0)
+static bool dcerpc_sec_vt_bitmask_check(const uint32_t *bitmask1,
+					struct dcerpc_sec_vt *c)
+{
+	if (bitmask1 == NULL) {
+		if (c->command & DCERPC_SEC_VT_MUST_PROCESS) {
+			DEBUG(10, ("SEC_VT check Bitmask1 must_process_command "
+				   "failed\n"));
+			return false;
+		}
+
+		return true;
+	}
+
+	if ((c->u.bitmask1 & DCERPC_SEC_VT_CLIENT_SUPPORTS_HEADER_SIGNING)
+	 && (!(*bitmask1 & DCERPC_SEC_VT_CLIENT_SUPPORTS_HEADER_SIGNING))) {
+		DEBUG(10, ("SEC_VT check Bitmask1 client_header_signing "
+			   "failed\n"));
+		return false;
+	}
+	return true;
+}
+
+static bool dcerpc_sec_vt_pctx_check(const struct dcerpc_sec_vt_pcontext *pcontext,
+				     struct dcerpc_sec_vt *c)
+{
+	TALLOC_CTX *mem_ctx;
+	bool ok;
+
+	if (pcontext == NULL) {
+		if (c->command & DCERPC_SEC_VT_MUST_PROCESS) {
+			DEBUG(10, ("SEC_VT check Pcontext must_process_command "
+				   "failed\n"));
+			return false;
+		}
+
+		return true;
+	}
+
+	mem_ctx = talloc_stackframe();
+	ok = ndr_syntax_id_equal(&pcontext->abstract_syntax,
+				 &c->u.pcontext.abstract_syntax);
+	if (!ok) {
+		DEBUG(10, ("SEC_VT check pcontext abstract_syntax failed: "
+			   "%s vs. %s\n",
+			   ndr_syntax_id_to_string(mem_ctx,
+					&pcontext->abstract_syntax),
+			   ndr_syntax_id_to_string(mem_ctx,
+					&c->u.pcontext.abstract_syntax)));
+		goto err_ctx_free;
+	}
+	ok = ndr_syntax_id_equal(&pcontext->transfer_syntax,
+				 &c->u.pcontext.transfer_syntax);
+	if (!ok) {
+		DEBUG(10, ("SEC_VT check pcontext transfer_syntax failed: "
+			   "%s vs. %s\n",
+			   ndr_syntax_id_to_string(mem_ctx,
+					&pcontext->transfer_syntax),
+			   ndr_syntax_id_to_string(mem_ctx,
+					&c->u.pcontext.transfer_syntax)));
+		goto err_ctx_free;
+	}
+
+	ok = true;
+err_ctx_free:
+	talloc_free(mem_ctx);
+	return ok;
+}
+
+static bool dcerpc_sec_vt_hdr2_check(const struct dcerpc_sec_vt_header2 *header2,
+				     struct dcerpc_sec_vt *c)
+{
+	if (header2 == NULL) {
+		if (c->command & DCERPC_SEC_VT_MUST_PROCESS) {
+			DEBUG(10, ("SEC_VT check Header2 must_process_command failed\n"));
+			return false;
+		}
+
+		return true;
+	}
 
+	if (!dcerpc_sec_vt_header2_equal(header2, &c->u.header2)) {
+		DEBUG(10, ("SEC_VT check Header2 failed\n"));
+		return false;
+	}
+
+	return true;
+}
 
 bool dcerpc_sec_verification_trailer_check(
 		const struct dcerpc_sec_verification_trailer *vt,
@@ -547,51 +614,38 @@ bool dcerpc_sec_verification_trailer_check(
 	}
 
 	for (i=0; i < vt->count.count; i++) {
+		bool ok;
 		struct dcerpc_sec_vt *c = &vt->commands[i];
 
 		switch (c->command & DCERPC_SEC_VT_COMMAND_ENUM) {
 		case DCERPC_SEC_VT_COMMAND_BITMASK1:
-			if (bitmask1 == NULL) {
-				CHECK("Bitmask1 must_process_command",
-				      !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
-				break;
-			}
-
-			if (c->u.bitmask1 & DCERPC_SEC_VT_CLIENT_SUPPORTS_HEADER_SIGNING) {
-				CHECK("Bitmask1 client_header_signing",
-				      *bitmask1 & DCERPC_SEC_VT_CLIENT_SUPPORTS_HEADER_SIGNING);
+			ok = dcerpc_sec_vt_bitmask_check(bitmask1, c);
+			if (!ok) {
+				return false;
 			}
 			break;
 
 		case DCERPC_SEC_VT_COMMAND_PCONTEXT:
-			if (pcontext == NULL) {
-				CHECK("Pcontext must_process_command",
-				      !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
-				break;
+			ok = dcerpc_sec_vt_pctx_check(pcontext, c);
+			if (!ok) {
+				return false;
 			}
-
-			CHECK_SYNTAX("Pcontect abstract_syntax",
-				     pcontext->abstract_syntax,
-				     c->u.pcontext.abstract_syntax);
-			CHECK_SYNTAX("Pcontext transfer_syntax",
-				     pcontext->transfer_syntax,
-				     c->u.pcontext.transfer_syntax);
 			break;
 
 		case DCERPC_SEC_VT_COMMAND_HEADER2: {
-			if (header2 == NULL) {
-				CHECK("Header2 must_process_command",
-				      !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
-				break;
+			ok = dcerpc_sec_vt_hdr2_check(header2, c);
+			if (!ok) {
+				return false;
 			}
-
-			CHECK("Header2", dcerpc_sec_vt_header2_equal(header2, &c->u.header2));
 			break;
 		}
 
 		default:
-			CHECK("Unknown must_process_command",
-			      !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
+			if (c->command & DCERPC_SEC_VT_MUST_PROCESS) {
+				DEBUG(10, ("SEC_VT check Unknown must_process_command failed\n"));
+				return false;
+			}
+
 			break;
 		}
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list