s4:rpc_server: use a variable for the max total reassembled request payload
authorStefan Metzmacher <metze@samba.org>
Wed, 22 Jun 2016 15:18:28 +0000 (17:18 +0200)
committerKarolin Seeger <kseeger@samba.org>
Mon, 4 Jul 2016 07:09:51 +0000 (09:09 +0200)
We still use the same limit of 4 MByte (DCERPC_NCACN_REQUEST_DEFAULT_MAX_SIZE)
by default.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11948

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Thu Jun 23 04:51:16 CEST 2016 on sn-devel-144

(cherry picked from commit 3f36d31c848496bf509db573e4c12821905b448d)

source4/rpc_server/dcerpc_server.c
source4/rpc_server/dcerpc_server.h

index 278e1af3eaafdb1178cef922c987bfb351776983..8439d84e37dd4b07882cf5cb69f75a3174d2d8d6 100644 (file)
@@ -408,6 +408,7 @@ _PUBLIC_ NTSTATUS dcesrv_endpoint_connect(struct dcesrv_context *dce_ctx,
        p->allow_bind = true;
        p->max_recv_frag = 5840;
        p->max_xmit_frag = 5840;
+       p->max_total_request_size = DCERPC_NCACN_REQUEST_DEFAULT_MAX_SIZE;
 
        *_p = p;
        return NT_STATUS_OK;
@@ -1532,7 +1533,7 @@ static NTSTATUS dcesrv_process_ncacn_packet(struct dcesrv_connection *dce_conn,
                /*
                 * Up to 4 MByte are allowed by all fragments
                 */
-               available = DCERPC_NCACN_PAYLOAD_MAX_SIZE;
+               available = dce_conn->max_total_request_size;
                if (er->stub_and_verifier.length > available) {
                        dcesrv_call_disconnect_after(existing,
                                "dcesrv_auth_request - existing payload too large");
@@ -1585,7 +1586,7 @@ static NTSTATUS dcesrv_process_ncacn_packet(struct dcesrv_connection *dce_conn,
                /*
                 * Up to 4 MByte are allowed by all fragments
                 */
-               if (call->pkt.u.request.alloc_hint > DCERPC_NCACN_PAYLOAD_MAX_SIZE) {
+               if (call->pkt.u.request.alloc_hint > dce_conn->max_total_request_size) {
                        dcesrv_call_disconnect_after(call,
                                "dcesrv_auth_request - initial alloc hint too large");
                        return dcesrv_fault(call, DCERPC_FAULT_ACCESS_DENIED);
index 15b25ea8fda32927405ab93c65678933311d6f41..72cb1bb12228bf4f246c8766dc419727965f76f1 100644 (file)
@@ -273,6 +273,9 @@ struct dcesrv_connection {
 
        /* the association group the connection belongs to */
        struct dcesrv_assoc_group *assoc_group;
+
+       /* The maximum total payload of reassembled request pdus */
+       size_t max_total_request_size;
 };