conn.delete_on_close(fd1, 1)
conn.close(fd1)
+ def test_delete_reparse_point(self):
+ conn = self.connection()
+ filename = 'reparse'
+ self.clean_file(conn, filename)
+
+ fd = conn.create(
+ filename,
+ DesiredAccess=sec.SEC_FILE_WRITE_ATTRIBUTE,
+ CreateDisposition=libsmb.FILE_CREATE)
+ b = reparse_symlink.put(0x80000025, 0, b'asdfasdfasdfasdfasdfasdf')
+ conn.fsctl(fd, libsmb.FSCTL_SET_REPARSE_POINT, b, 0)
+ conn.close(fd)
+
+ (fd,cr,_) = conn.create_ex(
+ filename,
+ DesiredAccess=sec.SEC_FILE_WRITE_ATTRIBUTE|sec.SEC_STD_DELETE,
+ CreateOptions=libsmb.FILE_OPEN_REPARSE_POINT,
+ CreateDisposition=libsmb.FILE_OPEN)
+
+ self.assertEqual(cr['file_attributes'] &
+ libsmb.FILE_ATTRIBUTE_REPARSE_POINT,
+ libsmb.FILE_ATTRIBUTE_REPARSE_POINT)
+
+ b = reparse_symlink.put(0x80000026, 0, b'')
+ with self.assertRaises(NTSTATUSError) as e:
+ conn.fsctl(fd, libsmb.FSCTL_DELETE_REPARSE_POINT, b, 0)
+ self.assertEqual(e.exception.args[0],
+ ntstatus.NT_STATUS_IO_REPARSE_TAG_MISMATCH)
+
+ b = reparse_symlink.put(0x80000026, 0, b' ')
+ with self.assertRaises(NTSTATUSError) as e:
+ conn.fsctl(fd, libsmb.FSCTL_DELETE_REPARSE_POINT, b, 0)
+ self.assertEqual(e.exception.args[0],
+ ntstatus.NT_STATUS_IO_REPARSE_DATA_INVALID)
+
+ b = reparse_symlink.put(0x80000025, 0, b' ')
+ with self.assertRaises(NTSTATUSError) as e:
+ conn.fsctl(fd, libsmb.FSCTL_DELETE_REPARSE_POINT, b, 0)
+ self.assertEqual(e.exception.args[0],
+ ntstatus.NT_STATUS_IO_REPARSE_DATA_INVALID)
+
+ b = reparse_symlink.put(0x80000025, 0, b'')
+ conn.fsctl(fd, libsmb.FSCTL_DELETE_REPARSE_POINT, b, 0)
+
+ with self.assertRaises(NTSTATUSError) as e:
+ conn.fsctl(fd, libsmb.FSCTL_DELETE_REPARSE_POINT, b, 0)
+ self.assertEqual(e.exception.args[0],
+ ntstatus.NT_STATUS_NOT_A_REPARSE_POINT)
+
+ conn.close(fd)
+
+ (fd,cr,_) = conn.create_ex(
+ filename,
+ DesiredAccess=sec.SEC_FILE_WRITE_ATTRIBUTE|sec.SEC_STD_DELETE,
+ CreateDisposition=libsmb.FILE_OPEN)
+
+ self.assertEqual(cr['file_attributes'] &
+ libsmb.FILE_ATTRIBUTE_REPARSE_POINT,
+ 0)
+
+ conn.delete_on_close(fd, 1)
+ conn.close(fd)
+
if __name__ == '__main__':
import unittest
unittest.main()