tests: Test error codes for SET_REPARSE_POINT
authorVolker Lendecke <vl@samba.org>
Fri, 2 Dec 2022 09:34:55 +0000 (10:34 +0100)
committerVolker Lendecke <vl@samba.org>
Mon, 5 Dec 2022 15:06:32 +0000 (15:06 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: David Mulder <dmulder@samba.org>
python/samba/tests/reparsepoints.py

index ee90b224dd31530b113c809e48a2e40cca10ca6f..95c41d18525fb451786848f5f5f7509c6b3a9993 100644 (file)
@@ -81,7 +81,28 @@ class ReparsePoints(samba.tests.libsmb.LibsmbTests):
         self.assertEqual(e.exception.args[0],
                          ntstatus.NT_STATUS_INVALID_BUFFER_SIZE)
 
+        for i in range(1,15):
+            with self.assertRaises(NTSTATUSError) as e:
+                conn.fsctl(fd, libsmb.FSCTL_SET_REPARSE_POINT, i * b'0', 0)
+
+            self.assertEqual(e.exception.args[0],
+                             ntstatus.NT_STATUS_IO_REPARSE_DATA_INVALID)
+
+        # Create a syntactically valid [MS-FSCC] 2.1.2.2 REPARSE_DATA_BUFFER
         b = reparse_symlink.put(0x80000025, 0, b'asdfasdfasdfasdfasdfasdf')
+
+        # Show that SET_REPARSE_POINT does exact length checks
+
+        with self.assertRaises(NTSTATUSError) as e:
+            conn.fsctl(fd, libsmb.FSCTL_SET_REPARSE_POINT, b + b'0', 0)
+        self.assertEqual(e.exception.args[0],
+                         ntstatus.NT_STATUS_IO_REPARSE_DATA_INVALID)
+
+        with self.assertRaises(NTSTATUSError) as e:
+            conn.fsctl(fd, libsmb.FSCTL_SET_REPARSE_POINT, b[:-1], 0)
+        self.assertEqual(e.exception.args[0],
+                         ntstatus.NT_STATUS_IO_REPARSE_DATA_INVALID)
+
         conn.fsctl(fd, libsmb.FSCTL_SET_REPARSE_POINT, b, 0)
         b = reparse_symlink.put(0x80000026, 0, b'asdfasdfasdfasdfasdfasdf')
         conn.fsctl(fd, libsmb.FSCTL_SET_REPARSE_POINT, b, 0)