libcli/smb: fix smbXcli_negprot(..., PROTOCOL_NT1, PROTOCOL_SMB2_02)
authorStefan Metzmacher <metze@samba.org>
Fri, 27 Jan 2012 12:39:54 +0000 (13:39 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 27 Jan 2012 14:27:40 +0000 (15:27 +0100)
The SMB1 negprot request already consumed the SMB2 sequence '0'.
This also happens for the SMB 2.02 case.

metze

Autobuild-User: Stefan Metzmacher <metze@samba.org>
Autobuild-Date: Fri Jan 27 15:27:41 CET 2012 on sn-devel-104

libcli/smb/smbXcli_base.c

index ba40ef7bf1a98ace0b1cce57387c363242e4a8a4..06fcb34a3129f0b2ba000c7d59678f248b7fedfd 100644 (file)
@@ -3838,10 +3838,8 @@ static void smbXcli_negprot_smb2_done(struct tevent_req *subreq)
 
                /*
                 * send a SMB2 negprot, in order to negotiate
-                * the SMB2 dialect. This needs to use the
-                * message id 1.
+                * the SMB2 dialect.
                 */
-               state->conn->smb2.mid = 1;
                subreq = smbXcli_negprot_smb2_subreq(state);
                if (tevent_req_nomem(subreq, req)) {
                        return;
@@ -3921,6 +3919,11 @@ static NTSTATUS smbXcli_negprot_dispatch_incoming(struct smbXcli_conn *conn,
                        substate->smb1.recv_iov = NULL;
                }
 
+               /*
+                * we got an SMB2 answer, which consumed sequence number 0
+                * so we need to use 1 as the next one
+                */
+               conn->smb2.mid = 1;
                tevent_req_set_callback(subreq, smbXcli_negprot_smb2_done, req);
                conn->dispatch_incoming = smb2cli_conn_dispatch_incoming;
                return smb2cli_conn_dispatch_incoming(conn, tmp_mem, inbuf);