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.

> [[[
> XFail testcase for the issue 3781

Thanks for writing the XFail test first.

> 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!

> +  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 
> +

Nice, but why not just pass NAME to sbox.build() and then hard-code
'bar' and 'baR' in the test?

> +  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?

> +  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?

Reply via email to