]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
python/samba/tests/blackbox: Tests with nested DFS container
authorNoel Power <noel.power@suse.com>
Mon, 27 Jul 2020 15:58:31 +0000 (16:58 +0100)
committerJeremy Allison <jra@samba.org>
Mon, 31 Aug 2020 19:09:24 +0000 (19:09 +0000)
Signed-off-by: Noel Power <noel.power@suse.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Mon Aug 31 19:09:24 UTC 2020 on sn-devel-184

python/samba/tests/blackbox/smbcacls_dfs_propagate_inherit.py [new file with mode: 0644]
selftest/target/Samba3.pm
source4/selftest/tests.py

diff --git a/python/samba/tests/blackbox/smbcacls_dfs_propagate_inherit.py b/python/samba/tests/blackbox/smbcacls_dfs_propagate_inherit.py
new file mode 100644 (file)
index 0000000..1df6014
--- /dev/null
@@ -0,0 +1,96 @@
+# Blackbox tests for smbcaclcs
+#
+# Copyright (C) Noel Power noel.power@suse.com
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+from __future__ import print_function
+from samba.tests import BlackboxProcessError
+import os
+from samba.tests.blackbox.smbcacls_propagate_inhertance import InheritanceSmbCaclsTests
+from samba.tests.blackbox.smbcacls import SmbCaclsBlockboxTestBase
+
+class DfsInheritanceSmbCaclsTests(InheritanceSmbCaclsTests):
+
+    def setUp(self):
+        # This is some intentional trickery to ensure we skip
+        # InheritanceSmbCaclsTests.setUp so we can create a new
+        # test directory & file hierachy (including a nested dfs link)
+        SmbCaclsBlockboxTestBase.setUp(self)
+        smbclient_args = self.build_test_cmd("smbclient", ["//%s/%s" % (self.server, self.share), "-c", "mkdir %s" % os.getenv("TESTDIR", "smbcacls")])
+        self.check_output(smbclient_args)
+
+        # create toplevel testdir structure with desired ACL(s)
+        #
+        #      +-tar_test_dir/    (OI)(CI)(I)(F)
+        #      +-oi_dir/        (OI)(CI)(I)(F)
+        #      | +-file.1            (I)(F)
+        #      | +-nested/      (OI)(CI)(I)(F)
+        #      |   +-file.2          (I)(F)
+        # DFS=>|   +-nested_again/     (OI)(CI)(I)(F)
+        #      |     +-file.3          (I)(F)
+
+        self.toplevel = self.create_remote_test_file("tar_test_dir/file-0")
+        self.dfs_target_share = os.getenv("DFS_TARGET_SHARE", "smbcacls_sharedir_dfs")
+        self.f1 = self.create_remote_test_file("tar_test_dir/oi_dir/file-1")
+        self.f2 = self.create_remote_test_file("tar_test_dir/oi_dir/nested/file-2")
+#        self.f3 = self.create_remote_test_file("tar_test_dir/oi_dir/nested/nested_again/file-3")
+
+
+        self.tar_dir = os.path.split(self.toplevel)[0]
+        self.oi_dir = os.path.split(self.f1)[0]
+        self.nested_dir = os.path.split(self.f2)[0]
+
+        self.nested_again_dir = os.path.join(self.nested_dir, "nested_again")
+
+        # dfs link
+        link_val = "msdfs:%s\\%s" % (self.server, self.dfs_target_share)
+        dfs_share_path = "smbcacls_share"
+        local_link_path =  os.path.join(os.environ["LOCAL_PATH"], dfs_share_path)
+        link_source = link_val
+        link_dest = os.path.join(local_link_path, self.nested_again_dir)
+
+
+        # unfortunately os.link won't work with a source file that doesn't
+        # exist, we need to run 'ln' directly
+        #os.link(link_source, link_dest)
+        link_args = ["ln", "-s", link_source, link_dest]
+        out = self.check_output(link_args)
+
+        self.f3 = self.create_remote_test_file("tar_test_dir/oi_dir/nested/nested_again/file-3")
+
+
+
+        dir_acl_str = "ACL:%s:ALLOWED/OI|CI/FULL" % self.user
+        inherited_dir_acl_str = "ACL:%s:ALLOWED/OI|CI|I/FULL" % self.user
+        file_acl_str = "ACL:%s:ALLOWED/I/FULL" % self.user
+
+        self.smb_cacls(["--modify", dir_acl_str, self.tar_dir])
+        self.smb_cacls(["--modify", inherited_dir_acl_str, self.oi_dir])
+        self.smb_cacls(["--modify", inherited_dir_acl_str, self.nested_dir])
+        self.smb_cacls(["--modify", inherited_dir_acl_str, self.nested_again_dir])
+        self.smb_cacls(["--modify", file_acl_str, self.f1])
+        self.smb_cacls(["--modify", file_acl_str, self.f2])
+        self.smb_cacls(["--modify", file_acl_str, self.f3])
+
+    def tearDown(self):
+        super(DfsInheritanceSmbCaclsTests, self).tearDown()
+        # for dfs tests inevitably we fallback to remove the local files in
+        # the base class, the base class however doesn't know about the
+        # target dfs share (or its contents) so we have to assume we need to
+        # remove the file on the dfs share
+        smbclient_args = self.build_test_cmd("smbclient", ["//%s/%s" % (self.server, self.dfs_target_share), "-c", "rm file-3"])
+        self.check_output(smbclient_args)
+
+
index 0a8cefa811d68a0579282ed38150ee3ea5fde8f6..444c837d816c4846f46c95308c02e354a5b2f633 100755 (executable)
@@ -1999,6 +1999,12 @@ sub provision($$)
        my $smbcacls_sharedir_dfs="$shrdir/smbcacls_sharedir_dfs";
        push(@dirs,$smbcacls_sharedir_dfs);
 
+       my $smbcacls_share="$shrdir/smbcacls_share";
+       push(@dirs,$smbcacls_share);
+
+       my $smbcacls_share_testdir="$shrdir/smbcacls_share/smbcacls";
+       push(@dirs,$smbcacls_share_testdir);
+
        my $badnames_shrdir="$shrdir/badnames";
        push(@dirs,$badnames_shrdir);
 
@@ -2327,6 +2333,11 @@ sub provision($$)
        }
 
        print CONF "
+[smbcacls_share]
+       path = $smbcacls_share
+        comment = smb username is [%U]
+       msdfs root = yes
+
 [smbcacls_sharedir_dfs]
        path = $smbcacls_sharedir_dfs
         comment = smb username is [%U]
index 5c4e9cef46b22ced1befef5eccb49bd236f54613..5dec3cba17dd700b66b140c9bc5dc87fee3460f6 100755 (executable)
@@ -947,9 +947,19 @@ planoldpythontestsuite("fileserver",
                        "samba.tests.blackbox.smbcacls_basic(DFS)",
                        environ={'SHARE': 'msdfs-share',
                                  'TESTDIR': 'smbcacls_sharedir_dfs'})
+# Run smbcacls_propagate_inhertance tests on non msdfs root share
 planoldpythontestsuite("fileserver",
                        "samba.tests.blackbox.smbcacls_propagate_inhertance")
-
+#
+# A) Run the smbcacls_propagate_inhertance tests on a msdfs root share
+#    *without* any nested dfs links
+# B) Run the smbcacls_propagate_inhertance tests on a msdfs root share
+#    *with* a nested dfs link
+#
+planoldpythontestsuite("fileserver",
+                       "samba.tests.blackbox.smbcacls_dfs_propagate_inherit",
+                       "samba.tests.blackbox.smbcacls_dfs_propagate_inherit(DFS-msdfs-root)",
+                       environ={'SHARE': 'smbcacls_share'})
 #
 # Want a selection of environments across the process models
 #