SVN Zugriff über Apache

Von neffets, 29. März 2010

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
Bereich