tests: add a Python test for case insensitive access
authorRalph Boehme <slow@samba.org>
Fri, 16 Dec 2022 09:43:11 +0000 (10:43 +0100)
committerJeremy Allison <jra@samba.org>
Tue, 20 Dec 2022 01:32:07 +0000 (01:32 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Tue Dec 20 01:32:07 UTC 2022 on sn-devel-184

python/samba/tests/libsmb-basic.py

index 36566436e8744641bfb98081064ad674940d1506..61a25a8c68266e6009de2084fe2a37588ad96443 100644 (file)
@@ -141,6 +141,58 @@ class LibsmbTestCase(samba.tests.libsmb.LibsmbTests):
         self.assertEqual(len(cc[0][1]),8)
         c.close(fnum)
 
+    def test_libsmb_TortureCaseSensitivity(self):
+        testdir = "test_libsmb_torture_case_sensitivity"
+        filename = "file"
+        filepath = testdir + "/" + filename
+
+        c = libsmb.Conn(self.server_ip, "tmp", self.lp, self.creds)
+
+        try:
+            c.deltree(testdir)
+        except:
+            pass
+
+        c.mkdir(testdir)
+
+        try:
+            # Now check for all possible upper-/lowercase combinations:
+            # - testdir/file
+            # - TESTDIR/file
+            # - testdir/FILE
+            # - TESTDIR/FILE
+
+            dircases = [testdir, testdir, testdir.upper(), testdir.upper()]
+            filecases = [filename, filename.upper(), filename, filename.upper()]
+            tcases = [{'dir':dir, 'file':file} for dir,file in zip(dircases,filecases)]
+
+            for tcase in tcases:
+                testpath = tcase['dir'] + "/" + tcase['file']
+
+                # Create the testfile
+                h = c.create(filepath,
+                             DesiredAccess=security.SEC_FILE_ALL,
+                             CreateDisposition=libsmb.FILE_OPEN_IF)
+                c.close(h)
+
+                # Open
+                c.loadfile(testpath)
+
+                # Search
+                ls = [f['name'] for f in c.list(tcase['dir'], mask=tcase['file'])]
+                self.assertIn(filename, ls, msg='When searching for "%s" not found in "%s"' % (tcase['file'], tcase['dir']))
+
+                # Rename
+                c.rename(testpath, tcase['dir'] + "/tmp")
+                c.rename(tcase['dir'] + "/TMP", filepath)
+                c.loadfile(testpath)
+
+                # Delete
+                c.unlink(testpath)
+
+        finally:
+            c.deltree(testdir)
+
 if __name__ == "__main__":
     import unittest
     unittest.main()