From 09d3df6e7e6aef03a306413e74ecd127215e1921 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 31 Oct 2011 15:23:00 +0100 Subject: s4:smb_server/smb2: correctly implement related compound requests We need to remember the session id and tree id. metze --- source4/smb_server/smb2/receive.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'source4/smb_server/smb2/receive.c') diff --git a/source4/smb_server/smb2/receive.c b/source4/smb_server/smb2/receive.c index 7463712cd4..0ebf8f31a1 100644 --- a/source4/smb_server/smb2/receive.c +++ b/source4/smb_server/smb2/receive.c @@ -69,6 +69,9 @@ struct smb2srv_request *smb2srv_init_request(struct smbsrv_connection *smb_conn) req->smb_conn = smb_conn; + req->chained_session_id = UINT64_MAX; + req->chained_tree_id = UINT32_MAX; + talloc_set_destructor(req, smb2srv_request_destructor); return req; @@ -233,6 +236,8 @@ static void smb2srv_chain_reply(struct smb2srv_request *p_req) sizeof(req->_chained_file_handle)); req->chained_file_handle = req->_chained_file_handle; } + req->chained_session_id = p_req->chained_session_id; + req->chained_tree_id = p_req->chained_tree_id; req->chain_status = p_req->chain_status; } @@ -342,9 +347,17 @@ static NTSTATUS smb2srv_reply(struct smb2srv_request *req) req->smb_conn->highest_smb2_seqnum = req->seqnum; } + if (flags & SMB2_HDR_FLAG_CHAINED) { + uid = req->chained_session_id; + tid = req->chained_tree_id; + } + req->session = smbsrv_session_find(req->smb_conn, uid, req->request_time); req->tcon = smbsrv_smb2_tcon_find(req->session, tid, req->request_time); + req->chained_session_id = uid; + req->chained_tree_id = tid; + errno = 0; /* supporting signing is mandatory in SMB2, and is per-packet. So we -- cgit