def setUp(self): super(PathFilterTestCase, self).setUp() self.tmp_root_dir = tempfile.mkdtemp() tmpdir = fixtures.TempDir(self.tmp_root_dir) self.useFixture(tmpdir) self.f = filters.PathFilter('/bin/chown', 'root', 'nova', tmpdir.path) gen_name = lambda: str(uuid.uuid4()) self.SIMPLE_FILE_WITHIN_DIR = os.path.join(tmpdir.path, 'some') self.SIMPLE_FILE_OUTSIDE_DIR = os.path.join(self.tmp_root_dir, 'some') self.TRAVERSAL_WITHIN_DIR = os.path.join(tmpdir.path, 'a', '..', 'some') self.TRAVERSAL_OUTSIDE_DIR = os.path.join(tmpdir.path, '..', 'some') self.TRAVERSAL_SYMLINK_WITHIN_DIR = os.path.join( tmpdir.path, gen_name()) os.symlink(os.path.join(tmpdir.path, 'a', '..', 'a'), self.TRAVERSAL_SYMLINK_WITHIN_DIR) self.TRAVERSAL_SYMLINK_OUTSIDE_DIR = os.path.join( tmpdir.path, gen_name()) os.symlink(os.path.join(tmpdir.path, 'a', '..', '..', '..', 'etc'), self.TRAVERSAL_SYMLINK_OUTSIDE_DIR) self.SYMLINK_WITHIN_DIR = os.path.join(tmpdir.path, gen_name()) os.symlink(os.path.join(tmpdir.path, 'a'), self.SYMLINK_WITHIN_DIR) self.SYMLINK_OUTSIDE_DIR = os.path.join(tmpdir.path, gen_name()) os.symlink(os.path.join(self.tmp_root_dir, 'some_file'), self.SYMLINK_OUTSIDE_DIR)
def test_argument_equality_constraint(self): f = filters.PathFilter('/bin/chown', 'root', 'nova', '/tmp/spam/eggs') args = ['chown', 'nova', '/tmp/spam/eggs'] self.assertTrue(f.match(args)) args = ['chown', 'quantum', '/tmp/spam/eggs'] self.assertFalse(f.match(args))
def test_argument_equality_constraint(self): temp_file_path = os.path.join(self.tmp_root_dir, 'spam/eggs') f = filters.PathFilter('/bin/chown', 'root', 'nova', temp_file_path) args = ['chown', 'nova', temp_file_path] self.assertTrue(f.match(args)) args = ['chown', 'quantum', temp_file_path] self.assertFalse(f.match(args))
def test_argument_pass_constraint(self): f = filters.PathFilter('/bin/chown', 'root', 'pass', 'pass') args = ['chown', 'something', self.SIMPLE_FILE_OUTSIDE_DIR] self.assertTrue(f.match(args))