[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha3-1536-g718f9ce

Stefan Metzmacher metze at samba.org
Fri May 16 06:55:49 GMT 2008


The branch, v4-0-test has been updated
       via  718f9ce6889346c92894e868f0678fbe404a43ab (commit)
       via  652b8c5f156b357e231057a5a0fbded88f4f9c5f (commit)
      from  0c09d28acf42400d26cc27675e37226060de26d3 (commit)

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


- Log -----------------------------------------------------------------
commit 718f9ce6889346c92894e868f0678fbe404a43ab
Author: Julien Kerihuel <j.kerihuel at openchange.org>
Date:   Thu May 15 13:55:23 2008 +0200

    The following patch calls the op_bind operation for an interface which context is altered by dcerpc alter_context requests. It prevents dcerpc_server from returning errors (nca_s_fault_access_denied, then nca_s_fault_context_mismatch in further client requests) and keeps the connection alive.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 652b8c5f156b357e231057a5a0fbded88f4f9c5f
Author: Julien Kerihuel <j.kerihuel at openchange.org>
Date:   Thu May 15 13:54:07 2008 +0200

    This patch adds remaining padding bytes to the dcerpc_fault IDL structure and adds a const 4 bytes blob to pkt.u.fault.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

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

Summary of changes:
 source/librpc/idl/dcerpc.idl      |    1 +
 source/rpc_server/dcerpc_server.c |   12 ++++++++++++
 2 files changed, 13 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/idl/dcerpc.idl b/source/librpc/idl/dcerpc.idl
index b2c6754..e228d85 100644
--- a/source/librpc/idl/dcerpc.idl
+++ b/source/librpc/idl/dcerpc.idl
@@ -116,6 +116,7 @@ interface dcerpc
 		uint16 context_id;
 		uint8 cancel_count;
 		uint32 status;
+		[flag(NDR_REMAINING)] DATA_BLOB _pad;
 	} dcerpc_fault;
 
 	/* the auth types we know about */
diff --git a/source/rpc_server/dcerpc_server.c b/source/rpc_server/dcerpc_server.c
index 1962a97..e0351bb 100644
--- a/source/rpc_server/dcerpc_server.c
+++ b/source/rpc_server/dcerpc_server.c
@@ -445,6 +445,7 @@ static NTSTATUS dcesrv_fault(struct dcesrv_call_state *call, uint32_t fault_code
 {
 	struct ncacn_packet pkt;
 	struct data_blob_list_item *rep;
+	uint8_t zeros[4];
 	NTSTATUS status;
 
 	/* setup a bind_ack */
@@ -458,6 +459,9 @@ static NTSTATUS dcesrv_fault(struct dcesrv_call_state *call, uint32_t fault_code
 	pkt.u.fault.cancel_count = 0;
 	pkt.u.fault.status = fault_code;
 
+	ZERO_STRUCT(zeros);
+	pkt.u.fault._pad = data_blob_const(zeros, sizeof(zeros));
+
 	rep = talloc(call, struct data_blob_list_item);
 	if (!rep) {
 		return NT_STATUS_NO_MEMORY;
@@ -684,6 +688,7 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_
 	struct dcesrv_connection_context *context;
 	const struct dcesrv_interface *iface;
 	struct GUID uuid, *transfer_syntax_uuid;
+	NTSTATUS status;
 
 	if_version = call->pkt.u.alter.ctx_list[0].abstract_syntax.if_version;
 	uuid = call->pkt.u.alter.ctx_list[0].abstract_syntax.uuid;
@@ -717,6 +722,13 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_
 	DLIST_ADD(call->conn->contexts, context);
 	call->context = context;
 
+	if (iface) {
+		status = iface->bind(call, iface);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
+		}
+	}
+
 	return NT_STATUS_OK;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list