[SCM] Samba Shared Repository - branch v4-1-test updated

Karolin Seeger kseeger at samba.org
Mon Jul 15 15:05:03 MDT 2013


The branch, v4-1-test has been updated
       via  4e74c61 smbd: Fix a 100% loop at shutdown time
       via  54ee31e s3-smbstatus: display [u|g]id of -1 as "-1" in connection list
       via  d07b694 s3-lib: hide incomplete smbXsrv_tcon_global records
       via  38841bb s3-lib: fix segf while reading incomplete session info (bug #10003)
      from  d95ed7f VERSION: Bump version number up to 4.1.0rc2...

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-1-test


- Log -----------------------------------------------------------------
commit 4e74c615d56465b5a57f65e6815cbdf0d0b2928a
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jul 11 16:22:26 2013 +0200

    smbd: Fix a 100% loop at shutdown time
    
    In the destructor of fsp->aio_requests[0] we put another request into
    fsp->aio_requests[0]. Don't overwrite that with TALLOC_FREE.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Jul 11 20:56:42 CEST 2013 on sn-devel-104
    (cherry picked from commit 940395d38bcc348eb5f1be7ba03cd554d9d3bc93)
    
    Fix bug #10013 - 940395d from master needs porting to 4.0 and 4.1.
    
    Autobuild-User(v4-1-test): Karolin Seeger <kseeger at samba.org>
    Autobuild-Date(v4-1-test): Mon Jul 15 23:04:19 CEST 2013 on sn-devel-104

commit 54ee31eae52e72373d28b9666e5680da5bd99da8
Author: Björn Baumbach <bb at sernet.de>
Date:   Tue Jul 9 12:32:34 2013 +0200

    s3-smbstatus: display [u|g]id of -1 as "-1" in connection list
    
    In order to avoid displayed uid or gid of "4294967295" instead of "-1", we
    need to fetch the special case -1.
    The id can be -1 if we are reading e.g. incomplete session information.
    
    Signed-off-by: Björn Baumbach <bb at sernet.de>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Jul 10 01:18:30 CEST 2013 on sn-devel-104
    (cherry picked from commit 577cef82c776759c9f3cad7d33057ac865c40769)
    
    The last 3 patches address bug #10003 - s3-lib:segmentation fault while
    reading incomplete session info.

commit d07b694f85c31a461d5697b56494c8ee4000925f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jul 8 16:31:13 2013 +0200

    s3-lib: hide incomplete smbXsrv_tcon_global records
    
    Part of fix for bug #10003
    
    Pair-programmed-with: Björn Baumbach <bb at sernet.de>
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Signed-off-by: Björn Baumbach <bb at sernet.de>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    (cherry picked from commit c52e61f7ba215da28cbb7b8e328aea110ad79b11)

commit 38841bb0dbee310dc2eafdb78482a72cf906644f
Author: Björn Baumbach <bb at sernet.de>
Date:   Fri Jul 5 13:19:59 2013 +0200

    s3-lib: fix segf while reading incomplete session info (bug #10003)
    
    Pair-programmed-with: Stefan Metzmacher <metze at samba.org>
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Signed-off-by: Björn Baumbach <bb at sernet.de>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    (cherry picked from commit 53aa069b97070c73b782e2868b9b9686abe353cc)

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

Summary of changes:
 source3/lib/conn_tdb.c      |   22 ++++++++++++++++++++--
 source3/lib/sessionid_tdb.c |   15 ++++++++++-----
 source3/smbd/close.c        |    7 +++++--
 source3/utils/status.c      |   24 ++++++++++++++++++++----
 4 files changed, 55 insertions(+), 13 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/conn_tdb.c b/source3/lib/conn_tdb.c
index a7e7cf0..b218831 100644
--- a/source3/lib/conn_tdb.c
+++ b/source3/lib/conn_tdb.c
@@ -53,8 +53,13 @@ static int collect_sessions_fn(struct smbXsrv_session_global0 *global,
 	uint32_t id = global->session_global_id;
 	struct connections_forall_session sess;
 
-	sess.uid = global->auth_session_info->unix_token->uid;
-	sess.gid = global->auth_session_info->unix_token->gid;
+	if (global->auth_session_info == NULL) {
+		sess.uid = -1;
+		sess.gid = -1;
+	} else {
+		sess.uid = global->auth_session_info->unix_token->uid;
+		sess.gid = global->auth_session_info->unix_token->gid;
+	}
 	strncpy(sess.machine, global->channels[0].remote_name, sizeof(sess.machine));
 	strncpy(sess.addr, global->channels[0].remote_address, sizeof(sess.addr));
 
@@ -86,6 +91,19 @@ static int traverse_tcon_fn(struct smbXsrv_tcon_global0 *global,
 
 	TDB_DATA val = tdb_null;
 
+	/*
+	 * Note: that share_name is defined as array without a pointer.
+	 * that's why it's always a valid pointer here.
+	 */
+	if (strlen(global->share_name) == 0) {
+		/*
+		 * when a smbXsrv_tcon is created it's created
+		 * with emtpy share_name first in order to allocate
+		 * an id, before filling in the details.
+		 */
+		return 0;
+	}
+
 	status = dbwrap_fetch(state->session_by_pid, state,
 			      make_tdb_data((void*)&sess_id, sizeof(sess_id)),
 			      &val);
diff --git a/source3/lib/sessionid_tdb.c b/source3/lib/sessionid_tdb.c
index 045b3d2..7a19611 100644
--- a/source3/lib/sessionid_tdb.c
+++ b/source3/lib/sessionid_tdb.c
@@ -38,16 +38,21 @@ static int sessionid_traverse_read_fn(struct smbXsrv_session_global0 *global,
 		(struct sessionid_traverse_read_state *)private_data;
 	struct auth_session_info *session_info = global->auth_session_info;
 	struct sessionid session = {
-		.uid = session_info->unix_token->uid,
-		.gid = session_info->unix_token->gid,
+		.uid = -1,
+		.gid = -1,
 		.id_num = global->session_global_id,
 		.connect_start = nt_time_to_unix(global->creation_time),
 		.pid = global->channels[0].server_id,
 	};
 
-	strncpy(session.username,
-		session_info->unix_info->unix_name,
-		sizeof(fstring)-1);
+	if (session_info != NULL) {
+		session.uid = session_info->unix_token->uid;
+		session.gid = session_info->unix_token->gid;
+		strncpy(session.username,
+			session_info->unix_info->unix_name,
+			sizeof(fstring)-1);
+	}
+
 	strncpy(session.remote_machine,
 		global->channels[0].remote_name,
 		sizeof(fstring)-1);
diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index 2bd588b..f341c72 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -640,9 +640,12 @@ static NTSTATUS close_normal_file(struct smb_request *req, files_struct *fsp,
 		while (fsp->num_aio_requests != 0) {
 			/*
 			 * The destructor of the req will remove
-			 * itself from the fsp
+			 * itself from the fsp.
+			 * Don't use TALLOC_FREE here, this will overwrite
+			 * what the destructor just wrote into
+			 * aio_requests[0].
 			 */
-			TALLOC_FREE(fsp->aio_requests[0]);
+			talloc_free(fsp->aio_requests[0]);
 		}
 	}
 
diff --git a/source3/utils/status.c b/source3/utils/status.c
index f4b5f4e..be7c52f 100644
--- a/source3/utils/status.c
+++ b/source3/utils/status.c
@@ -283,13 +283,29 @@ static int traverse_sessionid(const char *key, struct sessionid *session,
 
 	Ucrit_addPid(session->pid);
 
-	fstr_sprintf(uid_str, "%u", (unsigned int)session->uid);
-	fstr_sprintf(gid_str, "%u", (unsigned int)session->gid);
+	fstrcpy(uid_str, "-1");
+
+	if (session->uid != -1) {
+		if (numeric_only) {
+			fstr_sprintf(uid_str, "%u", (unsigned int)session->uid);
+		} else {
+			fstrcpy(uid_str, uidtoname(session->uid));
+		}
+	}
+
+	fstrcpy(gid_str, "-1");
+
+	if (session->gid != -1) {
+		if (numeric_only) {
+			fstr_sprintf(gid_str, "%u", (unsigned int)session->gid);
+		} else {
+			fstrcpy(gid_str, gidtoname(session->gid));
+		}
+	}
 
 	d_printf("%-7s   %-12s  %-12s  %-12s (%s)\n",
 		 procid_str_static(&session->pid),
-		 numeric_only ? uid_str : uidtoname(session->uid),
-		 numeric_only ? gid_str : gidtoname(session->gid),
+		 uid_str, gid_str,
 		 session->remote_machine, session->hostname);
 
 	return 0;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list