Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to configure SVN web access for different write permissions?

I'm trying to configure SVN web access on Apache2 under Windows Server 2008 for different write permissions.

I have next Apache2 conf:

<Location /svn>
 SVNParentPath "E:\SVN"

 DAV svn
 SVNListParentPath on
 AuthType Basic
 AuthName "Subversion repositories"
 Require valid-user

 AuthUserFile svn-auth.txt
 AuthzSVNAccessFile svn-acl.txt
</Location>

<Location /svn/foobar>
 SVNParentPath "E:\SVN\foobar"

 DAV svn
 SVNListParentPath on
 AuthType Basic
 AuthName "Subversion repositories"
 Require valid-user

 AuthUserFile svn-auth.txt
 AuthzSVNAccessFile svn-acl.txt
</Location>

E:\SVN is a root directory for all repositories - I want to list the all. It contains E:\SVN\test - is a project repository.

and E:\SVN\foobar - is a sub-root directory containing E:\SVN\foobar\foo and E:\SVN\foobar\bar - project repositories.

File svn-auth.txt contains a number of user passwords generated by htpasswd.exe

File svn-acl.txt contains a write access rules, but it doesn't work! Event it contains only one global permission:

[/]
* = rw

What is the different between SVNPath and SVNParentPath in Apache2 config for SVN? Maybe it would be make a sense?

And of course it doesn't work too if I add a group or a user:

[groups]
full = abatishchev

[/]
* = r
@full = rw
abatishchev = rw

I'm getting 403 Forbiden.

What am I doing wrong? TIA!

Update: I found a record from error.log:

The URI does not contain the name of a repository.  [403, #190001]

What could it mean?

like image 366
abatishchev Avatar asked Jan 23 '23 20:01

abatishchev


2 Answers

SVNPath is for one repository, SVNParentPath is for a root directory containing several repositories. So you should remove your second location in the Apache configuration file because it conflicts with the first if you try to access http://<host>/svn/foobar.

You should put absolute paths for the access and authentication files, make sure the Apache service has read/write access to the parent directory and all the repositories, and read access to those access and authentication files, it is often overlooked in manual installations.

For example:

<Location /svn>
    RedirectMatch ^(/svn)$ $1/
    SVNParentPath E:\SVN

    DAV svn
    SVNListParentPath on
    AuthType Basic
    AuthName "Subversion repositories"
    Require valid-user

    AuthUserFile C:\SVN\conf\svn-auth.txt
    AuthzSVNAccessFile C:\SVN\conf\svn-acl.txt
</Location>

You will find all the necessary information in Version Control with Subversion (this is the link to the latest version, though the Apache configuration settings haven't changed lately).

Then you should be able to specify global or individual permissions for groups and users, for your repositories. Examples of that can be found here, with the name you gave:

[groups]
full = abatishchev, anotherguy
main = abatishchev

[/]
* = r
@full = rw
abatishchev = rw

[foobar:/]
* =
@main = rw
full = r

[otherproject:/]
@main = rw
full = r

In this example, you have set general rules in [/], then particular rules that will prevail for foorbar (and everything below), and otherproject. You can even specify specific rules for individual directories of a repository.

like image 200
RedGlyph Avatar answered Jan 29 '23 08:01

RedGlyph


Changing Apache config

<Location /svn>

to

<Location /svn/>

fixes the problem of 403 error on directory listing

like image 22
abatishchev Avatar answered Jan 29 '23 08:01

abatishchev