[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Sat Mar 12 08:44:03 UTC 2016


The branch, master has been updated
       via  5fc6d2d smbd: Only check dev/inode in open_directory, not the full stat()
       via  2e2f811 lib/socket/interfaces: Fix some uninitialied bytes.
      from  2ef0eed selftest: mark samba4.winbind.struct.domain_info.ad_member as flapping

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


- Log -----------------------------------------------------------------
commit 5fc6d2dabdf2aeef74fdefaa67eae0348bbf7a44
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Mar 11 14:27:53 2016 +1300

    smbd: Only check dev/inode in open_directory, not the full stat()
    
    This is needed because the smb2.create.mkdir-dup test creates a race,
    and against an AD DC this can cause a flapping test if the lstat() and
    stat() calls are made either side of the chown() due to creation of a
    file by administrator.
    
    Fix based on original patches by myself, by Douglas Bagnall
    <douglas.bagnall at catalyst.net.nz>.  and Jeremy Allison <jra at samba.org>
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11780
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Sat Mar 12 09:43:21 CET 2016 on sn-devel-144

commit 2e2f81134c86ef3146781d62d9f561f496b74ee2
Author: Günther Deschner <gd at samba.org>
Date:   Wed Mar 2 18:32:53 2016 +0100

    lib/socket/interfaces: Fix some uninitialied bytes.
    
    Valgrind reports the following:
    
    ==26599== Syscall param ioctl(SIOCETHTOOL) points to uninitialised byte(s)
    ==26599==    at 0x7014707: ioctl (in /usr/lib64/libc-2.22.so)
    ==26599==    by 0x79D1585: query_iface_speed_from_name (interfaces.c:152)
    ==26599==    by 0x79D1BBA: _get_interfaces (interfaces.c:277)
    ==26599==    by 0x79D1E80: get_interfaces (interfaces.c:368)
    ==26599==    by 0x508A7E3: load_interfaces (interface.c:612)
    ==26599==    by 0x150B30: main (net.c:963)
    ==26599==  Address 0xffefff0d8 is on thread 1's stack
    ==26599==  in frame #1, created by query_iface_speed_from_name
    (interfaces.c:130)
    ==26599==
    ==26599== Syscall param ioctl(SIOCETHTOOL) points to uninitialised byte(s)
    ==26599==    at 0x7014707: ioctl (in /usr/lib64/libc-2.22.so)
    ==26599==    by 0x79D15CC: query_iface_speed_from_name (interfaces.c:164)
    ==26599==    by 0x79D1BBA: _get_interfaces (interfaces.c:277)
    ==26599==    by 0x79D1E80: get_interfaces (interfaces.c:368)
    ==26599==    by 0x508A7E3: load_interfaces (interface.c:612)
    ==26599==    by 0x150B30: main (net.c:963)
    ==26599==  Address 0xffefff0d8 is on thread 1's stack
    ==26599==  in frame #1, created by query_iface_speed_from_name
    (interfaces.c:130)
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 lib/socket/interfaces.c |  1 +
 source3/smbd/open.c     | 14 ++++++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/socket/interfaces.c b/lib/socket/interfaces.c
index 2cabf46..dacd118 100644
--- a/lib/socket/interfaces.c
+++ b/lib/socket/interfaces.c
@@ -145,6 +145,7 @@ static void query_iface_speed_from_name(const char *name, uint64_t *speed)
 		goto done;
 	}
 
+	ZERO_STRUCT(ifr);
 	strncpy(ifr.ifr_name, name, IF_NAMESIZE);
 
 	ifr.ifr_data = (void *)&edata;
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index baebd7c..e5503f5 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -3635,8 +3635,18 @@ static NTSTATUS open_directory(connection_struct *conn,
 		return status;
 	}
 
-	/* Ensure there was no race condition. */
-	if (!check_same_stat(&smb_dname->st, &fsp->fsp_name->st)) {
+	if(!S_ISDIR(fsp->fsp_name->st.st_ex_mode)) {
+		DEBUG(5,("open_directory: %s is not a directory !\n",
+			 smb_fname_str_dbg(smb_dname)));
+                fd_close(fsp);
+                file_free(req, fsp);
+		return NT_STATUS_NOT_A_DIRECTORY;
+	}
+
+	/* Ensure there was no race condition.  We need to check
+	 * dev/inode but not permissions, as these can change
+	 * legitimately */
+	if (!check_same_dev_ino(&smb_dname->st, &fsp->fsp_name->st)) {
 		DEBUG(5,("open_directory: stat struct differs for "
 			"directory %s.\n",
 			smb_fname_str_dbg(smb_dname)));


-- 
Samba Shared Repository



More information about the samba-cvs mailing list