]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
tests: FIFOs should be shown as NFS reparse points
authorVolker Lendecke <vl@samba.org>
Mon, 17 Jun 2024 10:45:18 +0000 (12:45 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 12 Jul 2024 20:35:34 +0000 (20:35 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
python/samba/tests/reparsepoints.py
selftest/knownfail.d/reparse

index bf96def422dc15e51bf0bb00679b5c18c18c91e7..19d710adf74a3f1205fbf12d2a405d319abec66f 100644 (file)
@@ -20,6 +20,7 @@ from samba import (ntstatus,NTSTATUSError)
 from samba.dcerpc import security as sec
 from samba import reparse_symlink
 import samba.tests.libsmb
+import stat
 
 class ReparsePoints(samba.tests.libsmb.LibsmbTests):
 
@@ -36,6 +37,19 @@ class ReparsePoints(samba.tests.libsmb.LibsmbTests):
             force_smb1=smb1)
         return conn
 
+    def connection_posix(self):
+        share = samba.tests.env_get_var_value("SHARENAME", allow_missing=True)
+        if not share:
+            share = "posix_share"
+        conn = libsmb.Conn(
+            self.server_ip,
+            share,
+            self.lp,
+            self.creds,
+            force_smb1=True)
+        conn.smb1_posix()
+        return conn
+
     def clean_file(self, conn, filename):
         try:
             conn.unlink(filename)
@@ -368,6 +382,29 @@ class ReparsePoints(samba.tests.libsmb.LibsmbTests):
         conn.delete_on_close(fd, 1)
         conn.close(fd)
 
+    def test_fifo_reparse(self):
+        """Test FIFO reparse tag"""
+        filename = 'fifo'
+        smb2 = self.connection()
+        smb1 = self.connection_posix()
+
+        self.clean_file(smb2, filename)
+        smb1.mknod(filename, stat.S_IFIFO | 0o755)
+
+        fd = smb2.create(
+            filename,
+            DesiredAccess=sec.SEC_FILE_READ_ATTRIBUTE|sec.SEC_STD_DELETE,
+            CreateOptions=libsmb.FILE_OPEN_REPARSE_POINT,
+            CreateDisposition=libsmb.FILE_OPEN)
+        smb2.delete_on_close(fd, 1)
+
+        info = smb2.qfileinfo(fd, libsmb.FSCC_FILE_ATTRIBUTE_TAG_INFORMATION);
+        self.assertEqual(info['tag'], libsmb.IO_REPARSE_TAG_NFS)
+
+        reparse = smb2.fsctl(fd, libsmb.FSCTL_GET_REPARSE_POINT, b'', 1024)
+        (tag, ) = reparse_symlink.get(reparse)
+        self.assertEqual(tag, 'NFS_SPECFILE_FIFO')
+
 if __name__ == '__main__':
     import unittest
     unittest.main()
index 11d094aa5c698580b2c4be996fbc38800cd8ef66..03e158ad6bed5792c18747b74859dfe3566ee57f 100644 (file)
@@ -1,2 +1,3 @@
 ^samba.tests.reparsepoints.samba.tests.reparsepoints.ReparsePoints.test_create_reparse_directory
 ^samba.tests.reparsepoints.samba.tests.reparsepoints.ReparsePoints.test_create_reparse_nonempty_directory
+^samba.tests.reparsepoints.samba.tests.reparsepoints.ReparsePoints.test_fifo_reparse