summaryrefslogtreecommitdiff
path: root/source3/smbd/smb2_sesssetup.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2009-05-15 11:50:20 +0200
committerStefan Metzmacher <metze@samba.org>2009-05-22 14:03:13 +0200
commit7dfbb2835f395105982c8e42529c468de3cffcb4 (patch)
tree07b9780561b941fa9f80d7ebb31c85c029bc9541 /source3/smbd/smb2_sesssetup.c
parent7749647740e945cf63e3df76545c04129d592429 (diff)
downloadsamba-7dfbb2835f395105982c8e42529c468de3cffcb4.tar.gz
samba-7dfbb2835f395105982c8e42529c468de3cffcb4.tar.bz2
samba-7dfbb2835f395105982c8e42529c468de3cffcb4.zip
s3:smbd: implement SMB2 Tree Connect
For now this only checks if the share is present or not. metze
Diffstat (limited to 'source3/smbd/smb2_sesssetup.c')
-rw-r--r--source3/smbd/smb2_sesssetup.c13
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;