]> git.pld-linux.org Git - packages/samba.git/commitdiff
- added one more dcerpc patch from 4.2.next (pending call support)
authorJakub Bogusz <qboosh@pld-linux.org>
Fri, 22 May 2015 20:29:36 +0000 (22:29 +0200)
committerJakub Bogusz <qboosh@pld-linux.org>
Fri, 22 May 2015 20:29:36 +0000 (22:29 +0200)
samba-dcerpc-pending-call.patch [new file with mode: 0644]
samba-refactor-dcesrv_alter-function.patch
samba.spec

diff --git a/samba-dcerpc-pending-call.patch b/samba-dcerpc-pending-call.patch
new file mode 100644 (file)
index 0000000..19c8479
--- /dev/null
@@ -0,0 +1,87 @@
+From c35e4be4f481312e3b0d639ae8bb980786749321 Mon Sep 17 00:00:00 2001
+From: Julien Kerihuel <j.kerihuel@openchange.org>
+Date: Mon, 6 Apr 2015 11:26:58 +0200
+Subject: [PATCH] Add DCERPC flag to call unbind hooks without destroying the
+ connection itself upon termination of a connection with outstanding pending
+ calls.
+
+Reviewed-by: Stefan Metzmacher <metze@samba.org>
+Reviewed-by: Jelmer Vernooij <jelmer@samba.org>
+
+Autobuild-User(master): Jeremy Allison <jra@samba.org>
+Autobuild-Date(master): Tue Apr 14 20:39:34 CEST 2015 on sn-devel-104
+
+(cherry picked from commit fd90d270c7e97a639f42a96b674a674d1b51aa0d)
+---
+ source4/rpc_server/dcerpc_server.c | 21 +++++++++++++++++++++
+ source4/rpc_server/dcerpc_server.h |  1 +
+ 2 files changed, 22 insertions(+)
+
+diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
+index 4681e17..f25aa68 100644
+--- a/source4/rpc_server/dcerpc_server.c
++++ b/source4/rpc_server/dcerpc_server.c
+@@ -504,6 +504,7 @@ static int dcesrv_connection_context_destructor(struct dcesrv_connection_context
+       if (c->iface && c->iface->unbind) {
+               c->iface->unbind(c, c->iface);
++              c->iface = NULL;
+       }
+       return 0;
+@@ -620,6 +621,10 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call)
+               extra_flags |= DCERPC_PFC_FLAG_CONC_MPX;
+       }
++      if (call->state_flags & DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL) {
++              call->context->conn->state_flags |= DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL;
++      }
++
+       /* handle any authentication that is being requested */
+       if (!dcesrv_auth_bind(call)) {
+               talloc_free(call->context);
+@@ -839,6 +844,10 @@ static NTSTATUS dcesrv_alter(struct dcesrv_call_state *call)
+               }
+       }
++      if (call->state_flags & DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL) {
++              call->context->conn->state_flags |= DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL;
++      }
++
+       /* setup a alter_resp */
+       dcesrv_init_hdr(&pkt, lpcfg_rpc_big_endian(call->conn->dce_ctx->lp_ctx));
+       pkt.auth_length = 0;
+@@ -1377,6 +1386,18 @@ static void dcesrv_cleanup_broken_connections(struct dcesrv_context *dce_ctx)
+               cur = next;
+               next = cur->next;
++              if (cur->state_flags & DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL) {
++                      struct dcesrv_connection_context *context_cur, *context_next;
++
++                      context_next = cur->contexts;
++                      while (context_next != NULL) {
++                              context_cur = context_next;
++                              context_next = context_cur->next;
++
++                              dcesrv_connection_context_destructor(context_cur);
++                      }
++              }
++
+               dcesrv_terminate_connection(cur, cur->terminate);
+       }
+ }
+diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h
+index 2346876..8786cd8 100644
+--- a/source4/rpc_server/dcerpc_server.h
++++ b/source4/rpc_server/dcerpc_server.h
+@@ -102,6 +102,7 @@ struct dcesrv_call_state {
+ #define DCESRV_CALL_STATE_FLAG_ASYNC (1<<0)
+ #define DCESRV_CALL_STATE_FLAG_MAY_ASYNC (1<<1)
+ #define DCESRV_CALL_STATE_FLAG_MULTIPLEXED (1<<3)
++#define DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL (1<<4)
+       uint32_t state_flags;
+       /* the time the request arrived in the server */
+-- 
+1.9.1
+
index c6ec03f5a3a6d9f33f28881c8d3312e159a36ad0..8f02c76ff0870e0468e59389ea7a88e399fae59d 100644 (file)
@@ -25,7 +25,7 @@ diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_serv
 index f25aa68..b1c763b 100644
 --- a/source4/rpc_server/dcerpc_server.c
 +++ b/source4/rpc_server/dcerpc_server.c
-@@ -793,62 +793,27 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_
+@@ -793,66 +793,31 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_
        return NT_STATUS_OK;
  }
  
@@ -86,6 +86,10 @@ index f25aa68..b1c763b 100644
 -              }
 -      }
 -
+-      if (call->state_flags & DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL) {
+-              call->context->conn->state_flags |= DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL;
+-      }
+-
 -      /* setup a alter_resp */
        dcesrv_init_hdr(&pkt, lpcfg_rpc_big_endian(call->conn->dce_ctx->lp_ctx));
        pkt.auth_length = 0;
@@ -97,6 +101,10 @@ index f25aa68..b1c763b 100644
 +                                      DCESRV_CALL_STATE_FLAG_MULTIPLEXED) {
 +                      extra_flags |= DCERPC_PFC_FLAG_CONC_MPX;
 +              }
++              if (call->state_flags & DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL) {
++                      call->context->conn->state_flags |=
++                              DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL;
++              }
 +      }
        pkt.pfc_flags = DCERPC_PFC_FLAG_FIRST | DCERPC_PFC_FLAG_LAST | extra_flags;
        pkt.u.alter_resp.max_xmit_frag = 0x2000;
index 873922424b8d4b3b7595013b2ea1d4c856c8deee..b1ff6fdf6f02d9d8f5455ee783afd12ae45bcb97 100644 (file)
@@ -23,7 +23,7 @@ Summary:      Samba Active Directory and SMB server
 Summary(pl.UTF-8):     Serwer Samba Active Directory i SMB
 Name:          samba
 Version:       4.2.1
-Release:       0.1
+Release:       0.2
 Epoch:         1
 License:       GPL v3
 Group:         Networking/Daemons
@@ -49,7 +49,8 @@ Patch6:               server-role.patch
 Patch7:                %{name}-bug-9816.patch
 Patch8:                %{name}-lib-tls-fix-build-with-gnutls-3.4.patch
 Patch9:                %{name}-dcerpc-multiplexed.patch
-Patch10:       %{name}-refactor-dcesrv_alter-function.patch
+Patch10:       %{name}-dcerpc-pending-call.patch
+Patch11:       %{name}-refactor-dcesrv_alter-function.patch
 URL:           http://www.samba.org/
 BuildRequires: acl-devel
 %{?with_avahi:BuildRequires:   avahi-devel}
@@ -514,6 +515,7 @@ Ten pakiet zawiera schemat Samby (samba.schema) dla OpenLDAP-a.
 %patch8 -p1
 %patch9 -p1
 %patch10 -p1
+%patch11 -p1
 
 %{__sed} -i -e 's|#!/usr/bin/env python|#!/usr/bin/python|' source4/scripting/bin/samba*
 %{__sed} -i -e 's|#!/usr/bin/env perl|#!/usr/bin/perl|' pidl/pidl
This page took 0.046153 seconds and 4 git commands to generate.