Hi Daniel,
Thank you for the comments... :)
On Friday 04 February 2011 08:12 AM, Daniel Shahaf wrote:
Prabhu Gnana Sundar wrote on Thu, Feb 03, 2011 at 16:53:54 +0530:
Hi all,
Currently, as per the issue 3781, "checkout" reads the authz file in
*case insensitive* way, whereas "commit" reads the authz file in *case
sensitive* way.
Here is what is observed:
1. Checkout is *case insensitive* about the repository name section and
also the path-inside-repo section.
2. Commit is *case sensitive* about the repository name section *but
case insensitive* about the path-inside-repo section.
Attached an XFail testcase and the log message with this mail. Please
share your views.
You didn't actually say what the intended behaviour is.
The intended behaviour is path based authorization should be case
sensitive for all cases.
But it shows some inconsistencies currently...
It has been discussed in ,
http://mail-archives.apache.org/mod_mbox/subversion-dev/201101.mbox/%3c4d468561.3070...@collab.net%3E
Index: subversion/tests/cmdline/authz_tests.py
===================================================================
--- subversion/tests/cmdline/authz_tests.py (revision 1066732)
+++ subversion/tests/cmdline/authz_tests.py (working copy)
@@ -1061,6 +1061,67 @@
[], 'ls', '-R',
sbox.repo_url)
+
+def case_insensitive_authz(sbox):
+ "authz issue #3781, check case insensitiveness"
+
+ sbox.build()
+
+ # test the case-insensitivity of the path inside the repo
+ write_authz_file(sbox, {"/": "jrandom = r", "/A": "jrandom = r", "/a/Mu":
"jrandom = rw"})
+
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ wc_dir = sbox.wc_dir
+
+ mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_url = sbox.repo_url + '/A/mu'
+ svntest.main.file_append(mu_path, "hi")
+
+ # Create expected output tree.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/mu' : Item(verb='Sending'),
+ })
+
+ # Commit the file.
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ None,
+ None,
+ mu_path)
Hold on. Why does this work? You commit /A/mu and the authz file gives
you only 'r' access to /A!
It works because we have set 'rw' for the /a/Mu file.
And this must fail actually, because of the case-change in the path.
Tweaked the test-case.
+ mixed_case_repo_dir = mixcases(os.path.basename(sbox.repo_dir))
+
+ # test the case-insensitivity of the repo name
+ write_authz_file(sbox, {}, sections = {mixed_case_repo_dir + ":/": "jrandom =
r",
+ mixed_case_repo_dir + ":/A": "jrandom =
r",
+ mixed_case_repo_dir + ":/A/mu": "jrandom =
rw"})
+
Just for clarity, could you add sections for the correct-case repository
name to the authz file?
Sure :) added for clarity...
+ svntest.main.file_append(mu_path, "hi")
+ # Commit the file again.
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ None,
+ None,
+ mu_path)
+ svntest.actions.run_and_verify_svn2('No error',
+ svntest.verify.AnyOutput, [],
+ 0, 'cat', mu_url)
Could you have here both a commit that fails and a commit that succeeds?
Added :)
I have attached the tweaked correct patch and the log message with this
mail. Please share your views.
Thanks and regards
Prabhu
Index: subversion/tests/cmdline/authz_tests.py
===================================================================
--- subversion/tests/cmdline/authz_tests.py (revision 1067090)
+++ subversion/tests/cmdline/authz_tests.py (working copy)
@@ -1060,6 +1060,84 @@
[], 'ls', '-R',
sbox.repo_url)
+def case_insensitive_authz(sbox):
+ "authz issue #3781, check case insensitiveness"
+
+ sbox.build()
+
+ # test the case-insensitivity of the path inside the repo
+ write_authz_file(sbox, {"/": "jrandom = r", "/A": "jrandom = r", "/a/Mu": "jrandom = rw"})
+
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+
+ wc_dir = sbox.wc_dir
+
+ mu_path = os.path.join(wc_dir, 'A', 'mu')
+ mu_url = sbox.repo_url + '/A/mu'
+ svntest.main.file_append(mu_path, "hi")
+
+ # Create expected output tree.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/mu' : Item(verb='Sending'),
+ })
+
+ expected_error = "Commit failed"
+
+ # Commit the file.
+ svntest.actions.run_and_verify_commit(wc_dir,
+ None,
+ None,
+ expected_error,
+ mu_path)
+ svntest.actions.run_and_verify_svn2('No error',
+ svntest.verify.AnyOutput, [],
+ 0, 'cat', mu_url)
+
+ def mixcases(repo_name):
+ mixed_repo_name = ''
+ for i in range(0, len(repo_name)):
+ if i % 2 == 0:
+ mixed_val = repo_name[i].upper()
+ mixed_repo_name = mixed_repo_name + mixed_val
+ else:
+ mixed_val = repo_name[i].lower()
+ mixed_repo_name = mixed_repo_name + mixed_val
+ return mixed_repo_name
+
+ mixed_case_repo_dir = mixcases(os.path.basename(sbox.repo_dir))
+
+ # test the case-insensitivity of the repo name
+ write_authz_file(sbox, {}, sections = {mixed_case_repo_dir + ":/": "jrandom = r",
+ mixed_case_repo_dir + ":/A": "jrandom = r",
+ mixed_case_repo_dir + ":/A/mu": "jrandom = rw"})
+
+ svntest.main.file_append(mu_path, "hi")
+ os.popen("echo $wc_dir")
+ # Commit the file again.
+ svntest.actions.run_and_verify_commit(wc_dir,
+ None,
+ None,
+ expected_error,
+ mu_path)
+ svntest.actions.run_and_verify_svn2('No error',
+ svntest.verify.AnyOutput, [],
+ 0, 'cat', mu_url)
+
+ # test the case-insensitivity of the path inside the repo
+ write_authz_file(sbox, {"/": "jrandom = r", "/A": "jrandom = r", "/A/mu": "jrandom = rw"})
+
+ svntest.main.file_append(mu_path, "hi")
+
+ # Commit the file.
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ None,
+ None,
+ mu_path)
+ svntest.actions.run_and_verify_svn2('No error',
+ svntest.verify.AnyOutput, [],
+ 0, 'cat', mu_url)
+
########################################################################
# Run the tests
@@ -1092,6 +1170,8 @@
Skip(wc_wc_copy_revert, svntest.main.is_ra_type_file),
Skip(authz_recursive_ls,
svntest.main.is_ra_type_file),
+ XFail(Skip(case_insensitive_authz,
+ svntest.main.is_ra_type_file)),
]
serial_only = True
[[[
XFail testcase for the issue 3781
* subversion/tests/cmdline/authz_tests.py
(case_insensitive_authz, test_list): New XFail test for the issue 3781
Patch by: Prabhu Gnana Sundar <prabhugs{_AT_}collab.net>
Suggested by: Kamesh Jayachandran <kamesh{_AT_}collab.net>
]]]