[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Feb 24 19:14:46 MST 2010


The branch, master has been updated
       via  d1950d6... Make conn_close_all() safe to call from SMB2 sessions (fix crash bug).
      from  3c20251... s4:ldb Fix segfault in ldbsearch store_referral callback

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d1950d66c4ed38918323bdb8c0bb11700a47bdc3
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Feb 24 18:11:07 2010 -0800

    Make conn_close_all() safe to call from SMB2 sessions (fix crash bug).
    
    Ensure we don't call close_cnum() with SMB2, also talloc_move the
    compat_conn pointer from the NULL context onto the tcon context
    in SMB2 as it's conceptually owned by that pointer.
    
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/conn.c      |   27 +++++++++++++++++++--------
 source3/smbd/smb2_tcon.c |    6 ++++--
 2 files changed, 23 insertions(+), 10 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c
index 959fcd7..51f880d 100644
--- a/source3/smbd/conn.c
+++ b/source3/smbd/conn.c
@@ -177,15 +177,26 @@ return true if any were closed
 ****************************************************************************/
 bool conn_close_all(struct smbd_server_connection *sconn)
 {
-	connection_struct *conn, *next;
-	bool ret = false;
-	for (conn=sconn->smb1.tcons.Connections;conn;conn=next) {
-		next=conn->next;
-		set_current_service(conn, 0, True);
-		close_cnum(conn, conn->vuid);
-		ret = true;
+	if (sconn->allow_smb2) {
+		/* SMB2 */
+		if (sconn->smb2.sessions.list &&
+				sconn->smb2.sessions.list->tcons.list) {
+			return true;
+		}
+		return false;
+	} else {
+		/* SMB1 */
+		connection_struct *conn, *next;
+		bool ret = false;
+
+		for (conn=sconn->smb1.tcons.Connections;conn;conn=next) {
+			next=conn->next;
+			set_current_service(conn, 0, True);
+			close_cnum(conn, conn->vuid);
+			ret = true;
+		}
+		return ret;
 	}
-	return ret;
 }
 
 /****************************************************************************
diff --git a/source3/smbd/smb2_tcon.c b/source3/smbd/smb2_tcon.c
index 70c5e88..bd33007 100644
--- a/source3/smbd/smb2_tcon.c
+++ b/source3/smbd/smb2_tcon.c
@@ -150,6 +150,7 @@ static NTSTATUS smbd_smb2_tree_connect(struct smbd_smb2_request *req,
 	fstring service;
 	int snum = -1;
 	struct smbd_smb2_tcon *tcon;
+	connection_struct *compat_conn = NULL;
 	int id;
 	NTSTATUS status;
 
@@ -196,14 +197,15 @@ static NTSTATUS smbd_smb2_tree_connect(struct smbd_smb2_request *req,
 	tcon->session = req->session;
 	talloc_set_destructor(tcon, smbd_smb2_tcon_destructor);
 
-	tcon->compat_conn = make_connection_snum(req->sconn,
+	compat_conn = make_connection_snum(req->sconn,
 					snum, req->session->compat_vuser,
 					data_blob_null, "???",
 					&status);
-	if (tcon->compat_conn == NULL) {
+	if (compat_conn == NULL) {
 		TALLOC_FREE(tcon);
 		return status;
 	}
+	tcon->compat_conn = talloc_move(tcon, &compat_conn);
 	tcon->compat_conn->cnum = tcon->tid;
 
 	*out_share_type = 0x01;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list