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|
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)
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}')
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}')
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}')
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}')
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")