libcli/smb: construct the signing_key before forming the message
authorStefan Metzmacher <metze@samba.org>
Thu, 19 Jul 2012 09:16:16 +0000 (11:16 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 23 Jul 2012 16:19:36 +0000 (18:19 +0200)
metze

libcli/smb/smbXcli_base.c

index eb9e7d55cfe59891b8d6112e4af738fda57a6ccd..9aab0ab563a9fdf7f87af3914fe72f633883313c 100644 (file)
@@ -2558,37 +2558,6 @@ NTSTATUS smb2cli_req_compound_submit(struct tevent_req **reqs,
                SBVAL(state->smb2.hdr, SMB2_HDR_MESSAGE_ID, mid);
 
 skip_credits:
-               hdr_iov = num_iov;
-               iov[num_iov].iov_base = state->smb2.hdr;
-               iov[num_iov].iov_len  = sizeof(state->smb2.hdr);
-               num_iov += 1;
-
-               iov[num_iov].iov_base = discard_const(state->smb2.fixed);
-               iov[num_iov].iov_len  = state->smb2.fixed_len;
-               num_iov += 1;
-
-               if (state->smb2.dyn != NULL) {
-                       iov[num_iov].iov_base = discard_const(state->smb2.dyn);
-                       iov[num_iov].iov_len  = state->smb2.dyn_len;
-                       num_iov += 1;
-               }
-
-               reqlen  = sizeof(state->smb2.hdr);
-               reqlen += state->smb2.fixed_len;
-               reqlen += state->smb2.dyn_len;
-
-               if (i < num_reqs-1) {
-                       if ((reqlen % 8) > 0) {
-                               uint8_t pad = 8 - (reqlen % 8);
-                               iov[num_iov].iov_base = state->smb2.pad;
-                               iov[num_iov].iov_len = pad;
-                               num_iov += 1;
-                               reqlen += pad;
-                       }
-                       SIVAL(state->smb2.hdr, SMB2_HDR_NEXT_COMMAND, reqlen);
-               }
-               nbt_len += reqlen;
-
                if (state->session) {
                        bool should_sign = state->session->smb2.should_sign;
 
@@ -2622,6 +2591,37 @@ skip_credits:
                        }
                }
 
+               hdr_iov = num_iov;
+               iov[num_iov].iov_base = state->smb2.hdr;
+               iov[num_iov].iov_len  = sizeof(state->smb2.hdr);
+               num_iov += 1;
+
+               iov[num_iov].iov_base = discard_const(state->smb2.fixed);
+               iov[num_iov].iov_len  = state->smb2.fixed_len;
+               num_iov += 1;
+
+               if (state->smb2.dyn != NULL) {
+                       iov[num_iov].iov_base = discard_const(state->smb2.dyn);
+                       iov[num_iov].iov_len  = state->smb2.dyn_len;
+                       num_iov += 1;
+               }
+
+               reqlen  = sizeof(state->smb2.hdr);
+               reqlen += state->smb2.fixed_len;
+               reqlen += state->smb2.dyn_len;
+
+               if (i < num_reqs-1) {
+                       if ((reqlen % 8) > 0) {
+                               uint8_t pad = 8 - (reqlen % 8);
+                               iov[num_iov].iov_base = state->smb2.pad;
+                               iov[num_iov].iov_len = pad;
+                               num_iov += 1;
+                               reqlen += pad;
+                       }
+                       SIVAL(state->smb2.hdr, SMB2_HDR_NEXT_COMMAND, reqlen);
+               }
+               nbt_len += reqlen;
+
                if (signing_key) {
                        NTSTATUS status;