[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