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:
committed by
Ralph Boehme
parent
34be8ef596
commit
95e1998a4a
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user