]> git.pld-linux.org Git - packages/samba.git/blame - samba-dcerpc-multiplexed.patch
- bump talloc dep
[packages/samba.git] / samba-dcerpc-multiplexed.patch
CommitLineData
3d62e122
JB
1From 8c05ae93755a6f0f9887dd99f6356d488e337329 Mon Sep 17 00:00:00 2001
2From: Julien Kerihuel <j.kerihuel@openchange.org>
3Date: Tue, 24 Mar 2015 21:06:03 -0700
4Subject: [PATCH] Add multiplex state to dcerpc flags and control over
5 multiplex PFC flag in bind_ack and and dcesrv_alter replies
6
7Signed-off-by: Julien Kerihuel <j.kerihuel@openchange.org>
8Reviewed-by: "Stefan (metze) Metzmacher" <metze@samba.org>
9Reviewed-by: Jelmer Vernooij <jelmer@samba.org>
10(cherry picked from commit caaf89e899c2a3926fb9e54d1c86f1a9cd5d7618)
11---
12 source4/rpc_server/dcerpc_server.c | 15 ++++++++++++++-
13 source4/rpc_server/dcerpc_server.h | 1 +
14 2 files changed, 15 insertions(+), 1 deletion(-)
15
16diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
17index 4d5e166..4681e17 100644
18--- a/source4/rpc_server/dcerpc_server.c
19+++ b/source4/rpc_server/dcerpc_server.c
20@@ -614,6 +614,12 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call)
21 call->conn->cli_max_recv_frag = MIN(0x2000, call->pkt.u.bind.max_recv_frag);
22 }
23
24+ if ((call->pkt.pfc_flags & DCERPC_PFC_FLAG_CONC_MPX) &&
25+ (call->state_flags & DCESRV_CALL_STATE_FLAG_MULTIPLEXED)) {
26+ call->context->conn->state_flags |= DCESRV_CALL_STATE_FLAG_MULTIPLEXED;
27+ extra_flags |= DCERPC_PFC_FLAG_CONC_MPX;
28+ }
29+
30 /* handle any authentication that is being requested */
31 if (!dcesrv_auth_bind(call)) {
32 talloc_free(call->context);
33@@ -793,6 +799,7 @@ static NTSTATUS dcesrv_alter(struct dcesrv_call_state *call)
34 NTSTATUS status;
35 uint32_t result=0, reason=0;
36 uint32_t context_id;
37+ uint32_t extra_flags = 0;
38
39 /* handle any authentication that is being requested */
40 if (!dcesrv_auth_alter(call)) {
41@@ -826,12 +833,18 @@ static NTSTATUS dcesrv_alter(struct dcesrv_call_state *call)
42 reason = DCERPC_BIND_REASON_ASYNTAX;
43 }
44
45+ if ((call->pkt.pfc_flags & DCERPC_PFC_FLAG_CONC_MPX)) {
46+ if (call->context->conn->state_flags & DCESRV_CALL_STATE_FLAG_MULTIPLEXED) {
47+ extra_flags |= DCERPC_PFC_FLAG_CONC_MPX;
48+ }
49+ }
50+
51 /* setup a alter_resp */
52 dcesrv_init_hdr(&pkt, lpcfg_rpc_big_endian(call->conn->dce_ctx->lp_ctx));
53 pkt.auth_length = 0;
54 pkt.call_id = call->pkt.call_id;
55 pkt.ptype = DCERPC_PKT_ALTER_RESP;
56- pkt.pfc_flags = DCERPC_PFC_FLAG_FIRST | DCERPC_PFC_FLAG_LAST;
57+ pkt.pfc_flags = DCERPC_PFC_FLAG_FIRST | DCERPC_PFC_FLAG_LAST | extra_flags;
58 pkt.u.alter_resp.max_xmit_frag = 0x2000;
59 pkt.u.alter_resp.max_recv_frag = 0x2000;
60 if (result == 0) {
61diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h
62index c5d8632..2346876 100644
63--- a/source4/rpc_server/dcerpc_server.h
64+++ b/source4/rpc_server/dcerpc_server.h
65@@ -101,6 +101,7 @@ struct dcesrv_call_state {
66 */
67 #define DCESRV_CALL_STATE_FLAG_ASYNC (1<<0)
68 #define DCESRV_CALL_STATE_FLAG_MAY_ASYNC (1<<1)
69+#define DCESRV_CALL_STATE_FLAG_MULTIPLEXED (1<<3)
70 uint32_t state_flags;
71
72 /* the time the request arrived in the server */
73--
741.9.1
75
This page took 0.036159 seconds and 4 git commands to generate.