From 08b24e923dff99d3d3c0618903a7ed2959640470 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 8 Apr 2010 22:15:55 -0700 Subject: Stop smb2 from calling into smb1 blocking lock request code. Allocate a uint16_t internal SMB1 mid for an SMB2 request. Add a back pointer from the faked up smb_request struct to the smb2 request. Getting ready to add restart code for blocking locks, share mode violations and oplocks in SMB2. Jeremy. --- source3/smbd/smb2_glue.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'source3/smbd/smb2_glue.c') diff --git a/source3/smbd/smb2_glue.c b/source3/smbd/smb2_glue.c index d5a6217aa3..3ecc790bba 100644 --- a/source3/smbd/smb2_glue.c +++ b/source3/smbd/smb2_glue.c @@ -22,6 +22,18 @@ #include "smbd/globals.h" #include "../libcli/smb/smb_common.h" +static uint16_t allocate_next_mid(void) +{ + struct smbd_server_connection *sconn = smbd_server_conn; + + sconn->smb2.next_compat_mid++; + /* Avoid mid == 0 and mid == 0xffff. */ + if (sconn->smb2.next_compat_mid == 0xFFFF) { + sconn->smb2.next_compat_mid += 2; + } + return sconn->smb2.next_compat_mid; +} + struct smb_request *smbd_smb2_fake_smb_request(struct smbd_smb2_request *req) { struct smb_request *smbreq; @@ -46,7 +58,9 @@ struct smb_request *smbd_smb2_fake_smb_request(struct smbd_smb2_request *req) if (IVAL(inhdr, SMB2_HDR_FLAGS) & SMB2_HDR_FLAG_DFS) { smbreq->flags2 |= FLAGS2_DFS_PATHNAMES; } + req->compat_mid = smbreq->mid = allocate_next_mid(); smbreq->chain_fsp = req->compat_chain_fsp; + smbreq->smb2req = req; return smbreq; } -- cgit