diff options
author | Stefan Metzmacher <metze@samba.org> | 2011-10-31 15:23:00 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2011-10-31 19:39:04 +0100 |
commit | 09d3df6e7e6aef03a306413e74ecd127215e1921 (patch) | |
tree | 0edb1456d032147da65ac4b0a350852195673cbb /source4/smb_server/smb2/receive.c | |
parent | 95ca06410310589ef2ccf95f25b089dae756b1d0 (diff) | |
download | samba-09d3df6e7e6aef03a306413e74ecd127215e1921.tar.gz samba-09d3df6e7e6aef03a306413e74ecd127215e1921.tar.bz2 samba-09d3df6e7e6aef03a306413e74ecd127215e1921.zip |
s4:smb_server/smb2: correctly implement related compound requests
We need to remember the session id and tree id.
metze
Diffstat (limited to 'source4/smb_server/smb2/receive.c')
-rw-r--r-- | source4/smb_server/smb2/receive.c | 13 |
1 files changed, 13 insertions, 0 deletions
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 |