[SCM] Samba Shared Repository - branch master updated

Ralph Böhme slow at samba.org
Thu Dec 15 11:31:01 UTC 2022


The branch, master has been updated
       via  17bbd6ec4c2 smbd: Add "posix" flag to openat_pathref_dirfsp_nosymlink()
       via  612c8da01cf tests: Show that in smb1 posix we don't treat dirs as case sensitive
      from  897f08f7a03 testprogs: Use new kerberos options for samba-tool in test_kpasswd_mit.sh

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


- Log -----------------------------------------------------------------
commit 17bbd6ec4c2607afeadd91a29c245054a6ca6828
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Dec 14 17:35:17 2022 +0100

    smbd: Add "posix" flag to openat_pathref_dirfsp_nosymlink()
    
    Don't do the get_real_filename() retry if we're in posix context of if
    the connection is case sensitive.
    
    The whole concept of case sensivity blows my brain. In SMB1 without
    posix extensions it's a per-request thing. In SMB2 without posix
    extensions this should just depend on "case sensitive = yes/no", and
    in future SMB2 posix extensions this will become a per-request thing
    again, depending on the existence of the posix create context.
    
    Then there are other semantics that are attached to posix-ness, which
    have nothing to do with case sensivity. See for example merge request
    2819 and bug 8776, or commit f0e1137425f. Also see
    check_path_syntax_internal().
    
    This patch uses the same flags as openat_pathref_fsp_case_insensitive()
    does, but I am 100% certain this is wrong in a subtle way.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Ralph Böhme <slow at samba.org>
    Autobuild-Date(master): Thu Dec 15 11:30:04 UTC 2022 on sn-devel-184

commit 612c8da01cf54be1268f2fe27fb187161cc2d0b3
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Dec 14 18:05:04 2022 +0100

    tests: Show that in smb1 posix we don't treat dirs as case sensitive
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

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

Summary of changes:
 python/samba/tests/smb1posix.py | 52 +++++++++++++++++++++++++++++++++++++++++
 source3/selftest/tests.py       |  1 +
 source3/smbd/filename.c         |  1 +
 source3/smbd/files.c            |  8 ++++++-
 source3/smbd/proto.h            |  1 +
 5 files changed, 62 insertions(+), 1 deletion(-)
 create mode 100644 python/samba/tests/smb1posix.py


Changeset truncated at 500 lines:

diff --git a/python/samba/tests/smb1posix.py b/python/samba/tests/smb1posix.py
new file mode 100644
index 00000000000..52b0312ac8b
--- /dev/null
+++ b/python/samba/tests/smb1posix.py
@@ -0,0 +1,52 @@
+# Unix SMB/CIFS implementation.
+# Copyright Volker Lendecke <vl at samba.org> 2022
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+from samba.samba3 import libsmb_samba_internal as libsmb
+from samba import (ntstatus,NTSTATUSError)
+from samba.dcerpc import security as sec
+import samba.tests.libsmb
+
+class Smb1PosixTests(samba.tests.libsmb.LibsmbTests):
+
+    def test_directory_case_sensivity(self):
+        """Test that in smb1 posix dirs are case sensitive"""
+        conn = libsmb.Conn(
+            self.server_ip,
+            "posix_share",
+            self.lp,
+            self.creds,
+            force_smb1=True)
+        conn.smb1_posix()
+
+        try:
+            conn.mkdir("lower")
+        except NTSTATUSError as e:
+            if e.args[0] != ntstatus.NT_STATUS_OBJECT_NAME_COLLISION:
+                raise
+        try:
+            conn.mkdir("lower/second")
+        except NTSTATUSError as e:
+            if e.args[0] != ntstatus.NT_STATUS_OBJECT_NAME_COLLISION:
+                raise
+
+        self.assertFalse(conn.chkpath("Lower/second"))
+        conn.rmdir("lower/second")
+        conn.rmdir("lower")
+
+if __name__ == '__main__':
+    import unittest
+    unittest.main()
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index 1630fdd2035..a1379e8080e 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -1689,3 +1689,4 @@ for t in CLUSTERED_LOCAL_TESTS:
 planpythontestsuite("fileserver", "samba.tests.smb3unix")
 planpythontestsuite("fileserver", "samba.tests.reparsepoints")
 planpythontestsuite("fileserver_smb1", "samba.tests.smb2symlink")
+planpythontestsuite("fileserver_smb1", "samba.tests.smb1posix")
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index c66e8b4b24e..0859e6fd5c3 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -1122,6 +1122,7 @@ static NTSTATUS filename_convert_dirfsp_nosymlink(
 			conn,
 			dirname,
 			0,
+			posix,
 			&smb_dirname,
 			&unparsed,
 			&substitute);
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index ea1c31f4e85..3ea879eee3e 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -738,6 +738,7 @@ NTSTATUS openat_pathref_dirfsp_nosymlink(
 	struct connection_struct *conn,
 	const char *path_in,
 	NTTIME twrp,
+	bool posix,
 	struct smb_filename **_smb_fname,
 	size_t *unparsed,
 	char **substitute)
@@ -746,14 +747,17 @@ NTSTATUS openat_pathref_dirfsp_nosymlink(
 	struct smb_filename full_fname = {
 		.base_name = NULL,
 		.twrp = twrp,
+		.flags = posix ? SMB_FILENAME_POSIX_PATH : 0,
 	};
 	struct smb_filename rel_fname = {
 		.base_name = NULL,
 		.twrp = twrp,
+		.flags = full_fname.flags,
 	};
 	struct smb_filename *result = NULL;
 	struct files_struct *fsp = NULL;
 	char *path = NULL, *next = NULL;
+	bool case_sensitive;
 	int fd;
 	NTSTATUS status;
 	struct vfs_open_how how = {
@@ -922,7 +926,9 @@ next:
 		fsp,
 		&how);
 
-	if ((fd == -1) && (errno == ENOENT)) {
+	case_sensitive = (posix || conn->case_sensitive);
+
+	if ((fd == -1) && (errno == ENOENT) && !case_sensitive) {
 		const char *orig_base_name = rel_fname.base_name;
 
 		status = get_real_filename_at(
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 069c069f803..4a9ffbc0998 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -453,6 +453,7 @@ NTSTATUS openat_pathref_dirfsp_nosymlink(
 	struct connection_struct *conn,
 	const char *path_in,
 	NTTIME twrp,
+	bool posix,
 	struct smb_filename **_smb_fname,
 	size_t *unparsed,
 	char **substitute);


-- 
Samba Shared Repository



More information about the samba-cvs mailing list