Dmitry Pavlenko wrote:

> I'd like to ping my old report. I'll recollect: if there's no read 
> permission of the repository 
> root, "svn delete" for sub-URL always fails.

Hi Dmitry.

Thanks for the report.

I tried to reproduce this, and I cannot.  The tests I wrote are in the attached 
patch.

I tested with RA-serf (with FSFS and with BDB), on an Ubuntu Linux system.  All 
the tests pass.

Can you try this test, or do you have any idea what I need to do to reproduce 
the problem?

- Julian


> I had the same issue in SVNKit but fixed, and here's the fix:
> 
> svn log --diff -r9286 http://svn.svnkit.com/repos/svnkit/trunk/ 
> 
> I also tried to apply the same changes to Subversion,but
> it's not very comfortable for me to debug because of compilation problems (I 
> have to work with SVN 
> sources under chroot).
> 
> There's a patch with the changes I tried to perform. Important: it DOES NOT 
> work (FAILS with 
> segmentation fault --- maybe I've confused something with pools, sorry I 
> didn't debug) 
> but shows where and how to fix the problem. The main idea:
> 
> if we have several targets to delete: a/b/c/d, a/b/e/f, a/b/c/h, it's better 
> to extract common 
> parent "a/b" and set ra_session URL to    
> original_URL.append("a/b")    and walk using editor 
> through "c/d", "e/f", "c/h" and so on. (Though 
> this maybe won't work for single file URL...)
> 
> Anyway, I believe my report was useful, at least a bit!
> 
> [[[
> DO NOT apply this patch directly, it doesn't work!
> ]]]
> [[[
> Index: subversion/libsvn_client/delete.c
> ===================================================================
> --- subversion/libsvn_client/delete.c  (revision 1360990)
> +++ subversion/libsvn_client/delete.c  (working copy)
> @@ -233,6 +233,7 @@ delete_urls_multi_repos(const apr_array_header_t *
>   apr_hash_t *relpaths = apr_hash_make(pool);
>   apr_hash_index_t *hi;
>   int i;
> +  apr_pool_t* iterpool;
> 
>   /* Create a hash of repos_root -> ra_session maps and repos_root -> 
> relpaths
>       maps, used to group the various targets. */
> @@ -303,6 +304,8 @@ delete_urls_multi_repos(const apr_array_header_t *
> 
>       Now we iterate over the collection of sessions and do a commit for each
>       one with the collected relpaths. */
> +
> +  iterpool = svn_pool_create(pool);
>   for (hi = apr_hash_first(pool, sessions); hi; hi = apr_hash_next(hi))
>     {
>       const char *repos_root = svn__apr_hash_index_key(hi);
> @@ -310,10 +313,21 @@ delete_urls_multi_repos(const apr_array_header_t *
>       const apr_array_header_t *relpaths_list =
>         apr_hash_get(relpaths, repos_root, APR_HASH_KEY_STRING);
> 
> -      SVN_ERR(single_repos_delete(ra_session, repos_root, relpaths_list,
> +      const char* common_path;
> +      apr_array_header_t* condensed_targets;
> +      const char* url = repos_root;
> +
> +      svn_pool_clear(iterpool);
> +      SVN_ERR(svn_uri_condense_targets(&common_path, 
> &condensed_targets, relpaths_list, FALSE, 
> iterpool, iterpool));
> +      url = svn_path_url_add_component2(repos_root, common_path, pool);
> +
> +      SVN_ERR(svn_ra_reparent(ra_session, url, pool));
> +
> +      SVN_ERR(single_repos_delete(ra_session, url, condensed_targets,
>                                   revprop_table, commit_callback,
>                                   commit_baton, ctx, pool));
>     }
> +  svn_pool_destroy(iterpool);
> 
>   return SVN_NO_ERROR;
> }
> ]]]
> 
> --
> Dmitry Pavlenko,
> TMate Software,
> http://subgit.com/ - git+svn on the server side
> 
> 
> В сообщении от 18 June 2012 19:20:19 автор Dmitry Pavlenko написал:
>>  Hello again,
>> 
>>  I've fixed the issue in SVNKit: 
> http://svn.svnkit.com/repos/svnkit/trunk/
>>  at r9286 The approach is to use common ancestor instead of repository root
>>  to run editor calls. For example, to remove paths:
>> 
>>  directory/subdirectory1/file1
>>  directory/subdirectory1/file2
>>  directory/subdirectory2/file3
>> 
>>  instead of running
>> 
>>  openRoot();
>>  opedDir("directory")
>> 
>>  opedDir("directory/subdirectory1")
>>  delete("directory/subdirectory1/file1")
>>  delete("directory/subdirectory1/file2")
>>  closeDir()
>> 
>>  opedDir("directory/subdirectory2")
>>  delete("directory/subdirectory1/file3")
>>  closeDir()
>> 
>>  closeDir()
>>  closeDir()
>> 
>>  on http://host/path as on the root one can run
>> 
>>  opedRoot()
>> 
>>  opedDir("subdirectory1")
>>  delete("subdirectory1/file1")
>>  delete("subdirectory1/file2")
>>  closeDir()
>> 
>>  opedDir("subdirectory2")
>>  delete("subdirectory1/file3")
>>  closeDir()
>> 
>>  closeDir()
>> 
>>  http://host/path/directory as on the common ancestor.
>> 
>>  > Hello,
>>  > Suppose you have a repository with authz:
>>  > 
>>  > [/]
>>  > * =
>>  > [/directory]
>>  > * = rw
>>  > 
>>  > And the repository (http://localhost:43714/repos) contains a directory
>>  > (with "rw" access) and a file in it. File deletion fails 
> with the
>>  > following stacktrace (tried with SVN r1350986):
>>  > 
>>  > $ svn rm http://localhost:43714/repos/directory/file --username user
>>  > --password password -m "" subversion/svn/delete-cmd.c:90:
>>  > (apr_err=130003) subversion/svn/util.c:913: (apr_err=130003)
>>  > subversion/libsvn_client/delete.c:409: (apr_err=130003)
>>  > subversion/libsvn_client/delete.c:315: (apr_err=130003)
>>  > subversion/libsvn_client/delete.c:217: (apr_err=130003)
>>  > subversion/libsvn_delta/deprecated.c:52: (apr_err=130003)
>>  > subversion/libsvn_delta/path_driver.c:169: (apr_err=130003)
>>  > subversion/libsvn_ra_serf/commit.c:1300: (apr_err=130003)
>>  > subversion/libsvn_ra_serf/options.c:381: (apr_err=130003)
>>  > subversion/libsvn_ra_serf/util.c:780: (apr_err=130003)
>>  > subversion/libsvn_ra_serf/util.c:737: (apr_err=130003)
>>  > subversion/libsvn_ra_serf/util.c:1980: (apr_err=130003)
>>  > subversion/libsvn_ra_serf/util.c:1961: (apr_err=130003)
>>  > subversion/libsvn_ra_serf/util.c:2418: (apr_err=130003)
>>  > svn: E130003: The OPTIONS response contains invalid XML (403 
> Forbidden)
>>  > 
>>  > With SVN 1.6 everything is ok.
>>  > The problem is easily reproducible.
> 

Attachment: authz-del-no-root-read-1.patch
Description: Binary data

Reply via email to