[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