libcli/smb: calculate the credit charge on the input and output dyn_len
authorStefan Metzmacher <metze@samba.org>
Tue, 13 Aug 2013 07:50:29 +0000 (09:50 +0200)
committerKarolin Seeger <kseeger@samba.org>
Fri, 30 Aug 2013 09:53:23 +0000 (11:53 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 318735fd5e15c5fd7010c0f657c86d27b45279ac)

libcli/smb/smbXcli_base.c

index b950900ce9eb448a05f4124b9c168fa1612094fb..ef9d82a001ad400caf40778e209f4d9ff0a32645 100644 (file)
@@ -246,6 +246,11 @@ struct smbXcli_req_state {
                 */
                struct iovec *recv_iov;
 
+               /*
+                * the expected max for the response dyn_len
+                */
+               uint32_t max_dyn_len;
+
                uint16_t credit_charge;
 
                bool should_sign;
@@ -2787,7 +2792,12 @@ NTSTATUS smb2cli_req_compound_submit(struct tevent_req **reqs,
                }
 
                if (state->conn->smb2.server.capabilities & SMB2_CAP_LARGE_MTU) {
-                       charge = (MAX(state->smb2.dyn_len, 1) - 1)/ 65536 + 1;
+                       uint32_t max_dyn_len = 1;
+
+                       max_dyn_len = MAX(max_dyn_len, state->smb2.dyn_len);
+                       max_dyn_len = MAX(max_dyn_len, state->smb2.max_dyn_len);
+
+                       charge = (max_dyn_len - 1)/ 65536 + 1;
                } else {
                        charge = 1;
                }