Irgend wann stand ich vor der Aufgabe, das vorhandene CVS durch SVN zu ersetzen(ok, die größere Aufgabe war die Entwickler von dem Schritt zu überzeugen)
Da ich alle meine Benutzer schön im LDAP habe, sollte die Authentifizierung auch darüber erfolgen. Die Schwierigkeit war nur, eine stimmige Doku und ein passendes HowTo, oder einfach nur eine funktionierende Konfiguration zu finden.
Da ich für jedes Projekt ein neues Repository anlege, habe ich das SVN im Apache über ein Parent Repository eingebunden.
Die Rewrite Regeln sind notwendig um das Parent Verzeichniss browsen zu können.
Require LDAP-Group gibt eine Gruppe im LDAP an, in der der Benutzername als memberUid enthalten sein muss.
Auszug virtual-server.conf
ReWriteEngine on
RedirectMatch ^(/repos)$ $1/
DAV svn
SVNParentPath /var/repos/
SVNListParentPath On
SVNAutoversioning On
SVNReposName "Subversion Repository"
AuthType Basic
AuthName "Subversion Repository"
Require valid-user
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL ldap://ldapserver/ou=Users,dc=company,dc=local?uid?sub
AuthLDAPGroupAttribute memberuid
AuthLDAPGroupAttributeIsDN off
Require ldap-group cn=svnuser,ou=Groups,dc=company,dc=local
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
SVNListParentPath on
In der Datei dav_svn.authz werden Gruppe definiert, welchen dann in den Abschnitten der einzelnen Repositorys die Rechte zugewiesen werden. Wichtig, nicht den Namen des Repositorys vergessen!
Die Benutzer entsprechen den Usernamen aus dem LDAP, die Gruppennamen sind frei zu vergeben. (In der Transaktion kennt SVN nur den Benutzernamen)
Root hat übrigens nichts im SVN verlohren …
/etc/apache2/dav_svn.authz
[groups]
checkoutgroup=checkout
admins = rapunzel
entwicklung = max,moritz
[/]
*=r
[Project1:/]
@entwicklung = rw
@checkoutgroup = r