blob: 835cd3798cf4b3772cac97d56a84f25cadc7acae [file] [log] [blame]
#!/usr/bin/env python
#
# iprop_authz_tests.py: iprop tests that need to write an authz file
#
# Subversion is a tool for revision control.
# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
######################################################################
# General modules
import os
# Our testing module
import svntest
# (abbreviation)
Skip = svntest.testcase.Skip_deco
from svntest.main import write_restrictive_svnserve_conf
from svntest.main import write_authz_file
######################################################################
# Tests
#----------------------------------------------------------------------
# Property inheritance with read restrictions on parent paths.
@Skip(svntest.main.is_ra_type_file)
def iprops_authz(sbox):
"property inheritance and read restricted parents"
sbox.build()
wc_dir = sbox.wc_dir
# r2 - Set properties at various levels.
sbox.simple_propset('RootProp', 'Root-Prop-Val', '.')
sbox.simple_propset('BranchProp', 'Branch-Prop-Val', 'A')
sbox.simple_propset('RandomProp1', 'Random-Prop-Val-1', 'A/D')
sbox.simple_propset('RandomProp2', 'Random-Prop-Val-2', 'A/D/H')
sbox.simple_propset('FileProp1', 'File-Prop-Val-1', 'A/D/H/psi')
svntest.main.run_svn(None, 'commit', '-m', 'Add some properties',
wc_dir)
write_restrictive_svnserve_conf(sbox.repo_dir)
# Check that a restricted user can only see inherited props from
# parent paths which he has read access to.
# Grant access only to ^/A/D/H/psi. No inherited properties should
# be shown.
write_authz_file(sbox, {
"/A/D/H/psi" : svntest.main.wc_author + "=rw",})
expected_iprops = {}
expected_explicit_props = {'FileProp1' : 'File-Prop-Val-1'}
svntest.actions.run_and_verify_inherited_prop_xml(
sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props)
# Grant access to ^/A/D/H/psi and the repos root but not the intermediate
# paths between the two.
write_authz_file(sbox, {
"/" : svntest.main.wc_author + "=rw",
"/A" : svntest.main.wc_author + "=",
"/A/D/H/psi" : svntest.main.wc_author + "=rw",})
expected_iprops = {
sbox.repo_url : {'RootProp' : 'Root-Prop-Val'}}
svntest.actions.run_and_verify_inherited_prop_xml(
sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props)
# Grant access to ^/A/D/H/psi, the repos root, and the intermediate path
# ^/A/D. Everything else is still blocked.
write_authz_file(sbox, {
"/" : svntest.main.wc_author + "=rw",
"/A" : svntest.main.wc_author + "=",
"/A/D" : svntest.main.wc_author + "=rw",
"/A/D/H" : svntest.main.wc_author + "=",
"/A/D/H/psi" : svntest.main.wc_author + "=rw",})
expected_iprops = {
sbox.repo_url : {'RootProp' : 'Root-Prop-Val'},
sbox.repo_url + '/A/D': {'RandomProp1' : 'Random-Prop-Val-1'}}
svntest.actions.run_and_verify_inherited_prop_xml(
sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props)
# Grant read access to everything except ^/A/D/H/psi. In this case we
# should get an authorization failed error. It doesn't matter that we can
# read the parents.
write_authz_file(sbox, {
"/" : svntest.main.wc_author + "=rw",
"/A/D/H/psi" : svntest.main.wc_author + "=",})
if sbox.repo_url.startswith("http"):
expected_err = ".*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
svntest.actions.run_and_verify_svn(
None, expected_err, 'proplist', '-v',
'--show-inherited-props', sbox.repo_url + '/A/D/H/psi')
########################################################################
# Run the tests
# list all tests here, starting with None:
test_list = [ None,
iprops_authz,
]
serial_only = True
if __name__ == '__main__':
svntest.main.run_tests(test_list)
# NOTREACHED
### End of file.