]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
tests: Check symlinks are readable as reparse points
authorVolker Lendecke <vl@samba.org>
Wed, 17 May 2023 08:54:49 +0000 (10:54 +0200)
committerRalph Boehme <slow@samba.org>
Fri, 22 Nov 2024 11:05:32 +0000 (11:05 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Fri Nov 22 11:05:33 UTC 2024 on atb-devel-224

python/samba/tests/smb2symlink.py

index 74aaf9e1658e20bf7dcc4e31c0b7bb9b8bd5ab33..f9cd4a23cd67b6725c74cb73b890e11f9f22de45 100644 (file)
@@ -55,13 +55,19 @@ class Smb2SymlinkTests(samba.tests.libsmb.LibsmbTests):
             self.creds)
         return (smb1, smb2)
 
-    def create_symlink(self, conn, target, symlink):
-        self.clean_file(conn, symlink)
-        if (conn.protocol() < libsmb.PROTOCOL_SMB2_02 and conn.have_posix()):
-            conn.smb1_symlink(target, symlink)
+    def create_symlink(self, conn1, conn2, target, symlink,
+                       expect_tgt=None):
+
+        if expect_tgt is None:
+            expect_tgt = target
+
+        self.clean_file(conn1, symlink)
+        if (conn1.protocol() < libsmb.PROTOCOL_SMB2_02 and
+            conn1.have_posix()):
+            conn1.smb1_symlink(target, symlink)
         else:
             flags = 0 if target[0]=='/' else 1
-            syml = conn.create(
+            syml = conn1.create(
                 symlink,
                 DesiredAccess=sec.SEC_FILE_READ_ATTRIBUTE|
                 sec.SEC_FILE_WRITE_ATTRIBUTE|
@@ -70,8 +76,19 @@ class Smb2SymlinkTests(samba.tests.libsmb.LibsmbTests):
                 CreateDisposition=libsmb.FILE_OPEN_IF,
                 CreateOptions=libsmb.FILE_OPEN_REPARSE_POINT)
             b = reparse_symlink.symlink_put(target, target, 0, 1)
-            conn.fsctl(syml, libsmb.FSCTL_SET_REPARSE_POINT, b, 0)
-            conn.close(syml)
+            conn1.fsctl(syml, libsmb.FSCTL_SET_REPARSE_POINT, b, 0)
+            conn1.close(syml)
+
+        fd = conn2.create(symlink,
+                          DesiredAccess=sec.SEC_FILE_WRITE_ATTRIBUTE,
+                          CreateOptions=libsmb.FILE_OPEN_REPARSE_POINT,
+                          CreateDisposition=libsmb.FILE_OPEN)
+        blob = conn2.fsctl(fd, libsmb.FSCTL_GET_REPARSE_POINT, b'', 1024)
+        conn2.close(fd)
+
+        (tag,(subst,_,_,_)) = reparse_symlink.get(blob)
+        self.assertEqual(tag, "IO_REPARSE_TAG_SYMLINK")
+        self.assertEqual(expect_tgt, subst)
 
     def assert_symlink_exception(self, e, expect):
         self.assertEqual(e.args[0], ntstatus.NT_STATUS_STOPPED_ON_SYMLINK)
@@ -91,7 +108,7 @@ class Smb2SymlinkTests(samba.tests.libsmb.LibsmbTests):
         target="foo"
         suffix="bar"
 
-        self.create_symlink(smb1, target, symlink)
+        self.create_symlink(smb1, smb2, target, symlink);
 
         with self.assertRaises(NTSTATUSError) as e:
             fd = smb2.create_ex(f'{symlink}\\{suffix}')
@@ -111,7 +128,7 @@ class Smb2SymlinkTests(samba.tests.libsmb.LibsmbTests):
         symlink="syml"
         target="foo"
 
-        self.create_symlink(smb1, target, symlink)
+        self.create_symlink(smb1, smb2, target, symlink);
 
         with self.assertRaises(NTSTATUSError) as e:
             fd = smb2.create_ex(f'{symlink}')
@@ -135,7 +152,7 @@ class Smb2SymlinkTests(samba.tests.libsmb.LibsmbTests):
 
         for target in ["/etc", "//foo/bar", "/"]:
 
-            self.create_symlink(smb1, target, symlink)
+            self.create_symlink(smb1, smb2, target, symlink)
 
             with self.assertRaises(NTSTATUSError) as e:
                 fd = smb2.create_ex(f'{symlink}')
@@ -159,7 +176,7 @@ class Smb2SymlinkTests(samba.tests.libsmb.LibsmbTests):
         rel_dest="dst"
         target=f'{shareroot}/{rel_dest}'
 
-        self.create_symlink(smb1, target, symlink)
+        self.create_symlink(smb1, smb2, target, symlink, rel_dest)
 
         with self.assertRaises(NTSTATUSError) as e:
             fd = smb2.create_ex(f'{symlink}')
@@ -199,7 +216,7 @@ class Smb2SymlinkTests(samba.tests.libsmb.LibsmbTests):
         smb1.mkdir("sub")
         self.addCleanup(self.clean_file, smb1, "sub")
 
-        self.create_symlink(smb1, f'{localpath}/sub1', "sub/lnk")
+        self.create_symlink(smb1, smb2, f'{localpath}/sub1', "sub/lnk")
         self.addCleanup(self.clean_file, smb1, "sub/lnk")
 
         smb1.mkdir("sub1")