From a2e4b58e3183992a8a1492104ca580731458f9be Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 17 Feb 2023 15:40:30 +0100 Subject: [PATCH 1/3] tests: Move libsmb-basic to fileserver_smb1 environment This has the lower-case share, used in the next commit Bug: https://bugzilla.samba.org/show_bug.cgi?id=15313 Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison (cherry picked from commit a9301d8f2956409a6d36e7776d0237d03bfbdbf6) --- selftest/target/Samba3.pm | 1 + source4/selftest/tests.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index 6f93694f1b3..fd1d6873ae3 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -2106,6 +2106,7 @@ sub setup_fileserver_smb1 [global] client min protocol = CORE server min protocol = LANMAN1 + check parent directory delete on close = yes [hidenewfiles] path = $prefix_abs/share diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 774b874edbd..5e88cb54d3c 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -532,7 +532,7 @@ for t in smbtorture4_testsuites("dlz_bind9."): # The dlz_bind9 tests needs to look at the DNS database plansmbtorture4testsuite(t, "chgdcpass:local", ["ncalrpc:$SERVER", '-U$USERNAME%$PASSWORD']) -planpythontestsuite("nt4_dc_smb1", "samba.tests.libsmb-basic") +planpythontestsuite("fileserver_smb1", "samba.tests.libsmb-basic") planpythontestsuite("ad_member", "samba.tests.smb-notify", environ={'USERNAME':'$DC_USERNAME', -- 2.30.2 From 71858c3f06193ee6fbdce41935c4b1fd521d29ee Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 17 Feb 2023 15:41:12 +0100 Subject: [PATCH 2/3] tests: Show that the case sensitive large dir optimization is broken We don't normalize the directories Bug: https://bugzilla.samba.org/show_bug.cgi?id=15313 Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison (cherry picked from commit 342d8f6a0a8bc2229332783a840c882f85a1dd4e) --- python/samba/tests/libsmb-basic.py | 9 +++++++++ selftest/knownfail.d/dircasesensitive | 1 + 2 files changed, 10 insertions(+) create mode 100644 selftest/knownfail.d/dircasesensitive diff --git a/python/samba/tests/libsmb-basic.py b/python/samba/tests/libsmb-basic.py index 61a25a8c682..37b82b26dac 100644 --- a/python/samba/tests/libsmb-basic.py +++ b/python/samba/tests/libsmb-basic.py @@ -193,6 +193,15 @@ class LibsmbTestCase(samba.tests.libsmb.LibsmbTests): finally: c.deltree(testdir) + def test_libsmb_TortureDirCaseSensitive(self): + c = libsmb.Conn(self.server_ip, "lowercase", self.lp, self.creds) + c.mkdir("subdir") + c.mkdir("subdir/b") + ret = c.chkpath("SubDir/b") + c.rmdir("subdir/b") + c.rmdir("subdir") + self.assertTrue(ret) + if __name__ == "__main__": import unittest unittest.main() diff --git a/selftest/knownfail.d/dircasesensitive b/selftest/knownfail.d/dircasesensitive new file mode 100644 index 00000000000..d2eae416772 --- /dev/null +++ b/selftest/knownfail.d/dircasesensitive @@ -0,0 +1 @@ +^samba.tests.libsmb-basic.samba.tests.libsmb-basic.LibsmbTestCase.test_libsmb_TortureDirCaseSensitive.* -- 2.30.2 From ee9ff24225211216a6d43b60b9c22a263ac7e667 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 17 Feb 2023 10:02:37 +0100 Subject: [PATCH 3/3] smbd: Fix case normalization in for directories Bug: https://bugzilla.samba.org/show_bug.cgi?id=15313 Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison Autobuild-User(master): Volker Lendecke Autobuild-Date(master): Fri Feb 24 08:46:14 UTC 2023 on atb-devel-224 (cherry picked from commit bf9130d375b6c401bb79fc1a0911975814759e3b) --- selftest/knownfail.d/dircasesensitive | 1 - source3/smbd/filename.c | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) delete mode 100644 selftest/knownfail.d/dircasesensitive diff --git a/selftest/knownfail.d/dircasesensitive b/selftest/knownfail.d/dircasesensitive deleted file mode 100644 index d2eae416772..00000000000 --- a/selftest/knownfail.d/dircasesensitive +++ /dev/null @@ -1 +0,0 @@ -^samba.tests.libsmb-basic.samba.tests.libsmb-basic.LibsmbTestCase.test_libsmb_TortureDirCaseSensitive.* diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 73e88add2c3..e9775387d11 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -1123,6 +1123,14 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( char *substitute = NULL; size_t unparsed = 0; + status = normalize_filename_case(conn, dirname, ucf_flags); + if (!NT_STATUS_IS_OK(status)) { + DBG_ERR("normalize_filename_case %s failed: %s\n", + dirname, + nt_errstr(status)); + goto fail; + } + status = openat_pathref_dirfsp_nosymlink( mem_ctx, conn, -- 2.30.2