1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-17 04:23:50 +03:00

tests: Check symlinks are readable as reparse points

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
This commit is contained in:
Volker Lendecke
2023-05-17 10:54:49 +02:00
committed by Ralph Boehme
parent 34be8ef596
commit 95e1998a4a

View 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")