Auf SVN via Apache und der http-Methode zugreifen ist an sich trivial; einfach nach Handbuch konfigurieren und es tut.
Nun sind wir über ein Problem gestolpert, dass wir ähnlich wie bereits 2006 hatten, bei dem "svn copy" (COPY / MOVE / RENAME) ein "400 Bad Request" Fehler im Apache lieferte.
Der Fehler entsteht durch die Benutzung von mod_authz_svn AuthzSVNAccessFile /srv/svn/access.conf Nach etlichen Tests sind wir durch Zufall auf die Lösung gestoßen (unten ist dann unsere komplette funktionierende apache-Konfiguration). Das AuthzSVN Modul kommt durcheinander wenn man es in
<LocationMatch /[a-z]*/>
...regeln
AuthzSVNAccessFile /srv/svn/access.conf
</LocationMatch>
kapselt. Dann funktionieren die COPY, MOVE und RENAME Kommandos von svn nicht mehr. Scheinbar kommt das Modul mit dem [] durcheinander.
Lösung: benutze global ""
Funktionierende Apache-Konfiguration
<IfModule mod_dav_svn.c>
<VirtualHost *:80>
ServerName svn.neffets.de
UseCanonicalName on
# Do not set DocumentRoot. It is not needed here and just causes trouble.
#
# Map the error documents back to their defaults.
# Otherwise mod_dav_svn tries to find a "error" repository.
#
ErrorDocument 400 default
ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 405 default
ErrorDocument 408 default
ErrorDocument 410 default
ErrorDocument 411 default
ErrorDocument 412 default
ErrorDocument 413 default
ErrorDocument 414 default
ErrorDocument 415 default
ErrorDocument 500 default
ErrorDocument 501 default
ErrorDocument 502 default
ErrorDocument 503 default
<Location />
DAV svn
SVNParentPath /srv/svn
SVNListParentPath on
# SVNIndexXSLT "/svnindex.xsl"
# SetOutputFilter DEFLATE
# Hier keine LocationMatch /[a-z]* Regel benutzen, sonst schlägt svn COPY/MOVE/RENAME fehl!!
#-------- LDAP auth ---------------------
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative On
AuthName "My Subversion (ldap)"
AuthLDAPURL "ldap://ldaphost:389/dc=bo,dc=intern?uid?sub"
# "AuthLDAPGroupAttributeIsDN" muss auf "Off" gesetzt sein,
# sonst wird in der Mitgliederliste
# immer nach dem vollständigen DN des Benutzers gesucht
# und nicht nur nach der uid
AuthLDAPGroupAttributeIsDN Off
AuthLDAPGroupAttribute memberUid
#-------- /LDAP auth ---------------------
Require valid-user
Satisfy Any
<LimitExcept GET PROPFIND OPTIONS REPORT>
require ldap-group cn=httpsvn,ou=Groups,dc=intern
require ldap-group cn=httpadmin,ou=Groups,dc=intern
</LimitExcept>
AuthzSVNAccessFile /srv/svn/access.conf
</Location>
</VirtualHost>
</IfModule>
Bei der Prüfung der access.conf kommen die Check-URLs nun als "RepoName:/Pfad"
Beispiel access.conf, so dass auch für lesenden Zugriff nur authorisierte Leute ran kommen.
#######################################
#
# Gruppen
#
#######################################
[groups]
intern = egon, emil
#######################################
#
# Repos zu User/Gruppen
#
#######################################
[srv:/]
@intern = rw
[drupal:/]
@intern = rw
hans = r