[SCM] Samba Shared Repository - branch v4-0-test updated -
release-4-0-0alpha5-21-g351947d
Stefan Metzmacher
metze at samba.org
Fri Jul 4 08:02:53 GMT 2008
The branch, v4-0-test has been updated
via 351947dba3f7a26ac871d4aa7b6bba4cd472383a (commit)
via 9ff0ce42b32bf0f1463d2cb9c2a6595f51b13d04 (commit)
from e633dc4ec2d72c3d34b5e096e0460e07e07ab514 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test
- Log -----------------------------------------------------------------
commit 351947dba3f7a26ac871d4aa7b6bba4cd472383a
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Jul 3 13:40:31 2008 +0200
dcerpc.idl: the signing overhead can be more than 32 bytes
Windows seems to use 64 here, so we do now.
Before we got nca_proto_error fault because we send fragments
larger than the negotiated max frag size.
If the max frag size is 5840, we're sending 5837 bytes
when the auth_len is 45 and that matches w2k3 traffic.
metze
commit 9ff0ce42b32bf0f1463d2cb9c2a6595f51b13d04
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Jul 3 13:39:55 2008 +0200
rpc_server: use the same chunk_size logic as we we use in the client
metze
-----------------------------------------------------------------------
Summary of changes:
source/librpc/idl/dcerpc.idl | 2 +-
source/rpc_server/dcerpc_server.c | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/librpc/idl/dcerpc.idl b/source/librpc/idl/dcerpc.idl
index e228d85..57028ff 100644
--- a/source/librpc/idl/dcerpc.idl
+++ b/source/librpc/idl/dcerpc.idl
@@ -30,7 +30,7 @@ interface dcerpc
} dcerpc_bind;
const uint8 DCERPC_REQUEST_LENGTH = 24;
- const uint8 DCERPC_MAX_SIGN_SIZE = 32;
+ const uint8 DCERPC_MAX_SIGN_SIZE = 64;
typedef struct {
} dcerpc_empty;
diff --git a/source/rpc_server/dcerpc_server.c b/source/rpc_server/dcerpc_server.c
index e0351bb..d8dafd6 100644
--- a/source/rpc_server/dcerpc_server.c
+++ b/source/rpc_server/dcerpc_server.c
@@ -886,7 +886,7 @@ _PUBLIC_ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call)
struct ndr_push *push;
NTSTATUS status;
DATA_BLOB stub;
- uint32_t total_length;
+ uint32_t total_length, chunk_size;
struct dcesrv_connection_context *context = call->context;
/* call the reply function */
@@ -917,20 +917,20 @@ _PUBLIC_ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call)
total_length = stub.length;
+ /* we can write a full max_recv_frag size, minus the dcerpc
+ request header size */
+ chunk_size = call->conn->cli_max_recv_frag - (DCERPC_MAX_SIGN_SIZE+DCERPC_REQUEST_LENGTH);
+
do {
uint32_t length;
struct data_blob_list_item *rep;
struct ncacn_packet pkt;
+ const uint32_t overhead = (DCERPC_MAX_SIGN_SIZE+DCERPC_RESPONSE_LENGTH);
rep = talloc(call, struct data_blob_list_item);
NT_STATUS_HAVE_NO_MEMORY(rep);
- length = stub.length;
- if (length + DCERPC_RESPONSE_LENGTH > call->conn->cli_max_recv_frag) {
- /* the 32 is to cope with signing data */
- length = call->conn->cli_max_recv_frag -
- (DCERPC_MAX_SIGN_SIZE+DCERPC_RESPONSE_LENGTH);
- }
+ length = MIN(chunk_size, stub.length);
/* form the dcerpc response packet */
dcesrv_init_hdr(&pkt, lp_rpc_big_endian(call->conn->dce_ctx->lp_ctx));
--
Samba Shared Repository
More information about the samba-cvs
mailing list