s3:smb2_server: reset req->last_session_id and req->last_tid after using it
authorStefan Metzmacher <metze@samba.org>
Thu, 20 Sep 2012 03:10:28 +0000 (05:10 +0200)
committerKarolin Seeger <kseeger@samba.org>
Fri, 28 Sep 2012 07:12:46 +0000 (09:12 +0200)
If we can find a valid session or tcon we'll set it after the lookup,
but it need to make sure to reset it if we don't find the session.

This fixes a problem where a compound unrelated request between
related requests doesn't reset the session.

If we have 3 requests in a compound chain, request 3 should never
use the id's cached from request 1. It should only every inherit
handles from request 2.

metze
(similar to commit 2552b6632372b35cbd7b788c4e00091dfe520a41)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
source3/smbd/smb2_sesssetup.c
source3/smbd/smb2_tcon.c

index c90368ffc58aa201e1fd6fe80bd46ab9aa3562a8..1f48e332e85b584f2a71a6187a00e8e6b8d86bab 100644 (file)
@@ -835,6 +835,8 @@ NTSTATUS smbd_smb2_request_check_session(struct smbd_smb2_request *req)
                in_session_id = req->last_session_id;
        }
 
+       req->last_session_id = UINT64_MAX;
+
        /* lookup an existing session */
        p = idr_find(req->sconn->smb2.sessions.idtree, in_session_id);
        if (p == NULL) {
index 5ca303ec75b148c8b13a6c1c3684dd4533a6a307..5f0e3a937a3168a27b2034ab7d54571df37474c0 100644 (file)
@@ -298,6 +298,8 @@ NTSTATUS smbd_smb2_request_check_tcon(struct smbd_smb2_request *req)
                in_tid = req->last_tid;
        }
 
+       req->last_tid = UINT32_MAX;
+
        /* lookup an existing session */
        p = idr_find(req->session->tcons.idtree, in_tid);
        if (p == NULL) {