[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [Patch] Expression support for SVNPath and SVNParentPath

From: Branko Čibej <brane_at_apache.org>
Date: Thu, 15 Nov 2018 14:06:47 +0100

On 13.11.2018 17:50, Branko Čibej wrote:
> On 2015/02/25 17:35:57, Graham Leggett <minfrin_at_sharp.fm> wrote:
>> Hi all,
>>
>> The SVNParentPath directive allows a set of repos to be placed at an
> URL, but if you have more complex needs such as providing many customers
> (with separately mounted home directories) access to many repositories,
> this may not be enough.
>> The attached patch brings httpd v2.4 expression support to the SVNPath
> and SVNParentPath directories through the addition of an optional second
> parameter, which allows you to do stuff like this:
>> <LocationMatch ^/svn/(?<CUSTOMERNAME>[^/]+)/>
>>
>> # customer has their own partition, inside is an “svn” directory with
> repos in it
>> SVNParentPath /home/partition %{env:MATCH_CUSTOMERNAME}/svn
>>
>> # customer repos are protected by this group
>> require ldap-group
> cn=https://svn.${SERVER_SUFFIX}/%{env:MATCH_CUSTOMERNAME},ou=svn,ou=Groups,o=Somewhere
>> </LocationMatch>
>
> I'm trying to resurrect this branch and have hit a bit of a snag. I
> modified the HTTPd configuration we use for our automated tests so that
> it uses a LocationMatch with a match group and a suffix expression in
> SVNParentPath. However, the server is now crashing because
> dav_svn__get_root_dir() no longer returns a valid path.
>
> The configuration looks like this:
>
> <LocationMatch "^/svn-test-work/(?<REPOSITORIES>repositories)">
> DAV svn
> ...
> SVNParentPath "/dev/subversion/tests/cmdline/svn-test-work" "%{env:MATCH_REPOSITORIES}"
> ...
> </LocationMatch>
>
>
> and the parent path appears to be computed correctly, however,
> dav_svn__get_root_dir() is returning the actual regular expression from
> the LocationMatch line, i.e., it's returning
>
> ^/svn-test-work/(?<REPOSITORIES>repositories)
>
>
> instead of
>
> /svn-test-work/repositories
>
>
> which is the actual matched location, so of course later on
> svn_fspath__join() asserts because the former is not a canonical path.
>
> Graham, I presume that you tested this when you committed the original
> patch ... would you mind taking a look at the current code on the
> mod-dav-svn-locations branch? I don't think I changed anything
> significant when I was reworking the code, and I'm a bit lost in the
> expression stuff.
>
> This is the current diff from trunk:
>
> svn diff  http://svn.apache.org/repos/asf/subversion/trunk@r1846487 \
> http://svn.apache.org/repos/asf/subversion/branches/mod-dav-svn-expressions
>
>
> (I pegged the trunk revision because that's when the latest merge to the
> branch was made.)

Actually, mod_dav_svn doesn't work within any <LocationMatch> block that
has a non-trivial regular expression; so apparently this is not a
problem on the branch but on trunk. However, I don't know how to fix it.
There's probably an obvious way to find the actual location of the
request instead of the <Location> block's parameter, and we should be
using that, but don't.

-- Brane
Received on 2018-11-15 14:06:58 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.