diff options
Diffstat (limited to 'source3/smbd/smb2_sesssetup.c')
-rw-r--r-- | source3/smbd/smb2_sesssetup.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index a7fef4ab2f..fafda24ca4 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -115,6 +115,11 @@ static int smbd_smb2_session_destructor(struct smbd_smb2_session *session) return 0; } + /* first free all tcons */ + while (session->tcons.list) { + talloc_free(session->tcons.list); + } + idr_remove(session->conn->smb2.sessions.idtree, session->vuid); DLIST_REMOVE(session->conn->smb2.sessions.list, session); @@ -150,6 +155,14 @@ static NTSTATUS smbd_smb2_session_setup(struct smbd_smb2_request *req, return NT_STATUS_INSUFFICIENT_RESOURCES; } session->vuid = id; + + session->tcons.idtree = idr_init(session); + if (session->tcons.idtree == NULL) { + return NT_STATUS_NO_MEMORY; + } + session->tcons.limit = 0x00FFFFFF; + session->tcons.list = NULL; + DLIST_ADD_END(req->conn->smb2.sessions.list, session, struct smbd_smb2_session *); session->conn = req->conn; |