Bonjour à tous,
Je suis un peu coincé dans ma configuration d'Apache, donc c'était une bonne occasion pour s'inscrire sur developpez

Voici la config actuelle :


Le contenu du fichier /etc/apache2/mods-enable/dav_svn.conf :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Location /svn>
  # Enable the SVN access through Apache (module dav_svn)
  DAV svn
  # Set the parent path of all the repositories. You need either SVNPath and SVNParentPath, but not both.
  SVNParentPath /var/svn
  # To allow Apache to list the available repositories, use the following line:
  SVNListParentPath On
  
  # LDAP authentication
  AuthType Basic
  AuthBasicProvider ldap
  # Warning: AuthLDAPAuthoritative is now deprecated
  AuthName "Subversion (SVN) server"
  # LDAP request URL
  # Format: scheme://host:port/basedn?attribute?scope?filter
  AuthLDAPURL ldap://myldapserver/cn=users,dc=MyBase?uid?sub?(objectClass=*)
  Require valid-user
</Location>
Le contenu du fichier /etc/apache2/sites-enabled/websvn.conf :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Alias /websvn "/var/www/websvn"
<Directory "/var/www/websvn">
  # LDAP authentication
  AuthType Basic
  AuthBasicProvider ldap
  # Warning: AuthLDAPAuthoritative is now deprecated
  AuthName "WebSVN"
  # LDAP request URL
  # Format: scheme://host:port/basedn?attribute?scope?filter
  AuthLDAPURL ldap://myldapserver/cn=users,dc=MyBase?uid?sub?(objectClass=*)
  Require valid-user
</Directory>
Tout ceci fonctionne très bien puisque j'ai accès à mes dépôts comme je le souhaite, à travers un client SVN comme à travers WebSVN.

Voici ce que je cherche à faire :


Et voici tout ce que j'ai essayé, mais qui ne donne pas le résultat attendu :
  1. Remplacer <Location /svn> par <Location /> dans dav_svn.conf => Ok pour SVN (navigateur web + TortoiseSVN), mais renvoie une erreur "Could not open the requested SVN filesystem" lorsque je cherche à accéder à /websvn. Normal puisque http://monserveur/websvn/ n'est pas un dépôt SVN et qu'Apache pense que http://monserveur/ est la racine de dépôts SVN...
  2. Utiliser <Location /> dans dav_svn.conf et <Location /websvn>Dav Off</Location> dans websvn.conf => même erreur que précédemment
  3. Remplacer <Location /svn> par <LocationMatch "^/(?!websvn)"> dans dav_svn.conf => Renvoie une erreur 403 "You don't have permission to access / on this server." quand je cherche à naviguer vers http://monserveur/, et une erreur "La connexion a été réinitialisée" quand je cherche à naviguer vers http://monserveur/svn/. L'accès à WebSVN fonctionne cependant correctement.
  4. Insérer une directive 'Alias / /svn' dans dav_svn.conf => Les accès à / et /websvn renvoie 403, l'accès à /svn fonctionne.
  5. Introduire un fichier de site apache_svn.conf ayant pour contenu une directive mod_rewrite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <Directory "/var/www/html">
      RewriteEngine on
      # no need to have a particular condition, since we assume there is nothing important in /var/www/html
      RewriteCond $1 !^svn
      RewriteRule "^(.*)$" "svn/$1"
    </Directory>
    => Cette solution fonctionne très bien depuis un navigateur web (/ , /svn et /websvn) mais ne satisfait pas au protocole SVN puisque j'obtiens une erreur "http://monserveur/monDepot isn't in the same repository as http://monserveur/svn/monDepot".


Mon problème est clairement que l'instruction <Location /> ne fait pas qu'agir sur la racine du serveur web, mais impacte tous les sous-répertoires.
J'ai trouvé un fil de discussion qui traite de ce même problème, mais la solution trouvée ne me convient pas : il faut reconfigurer Apache pour chaque nouveau dépôt. D'ailleurs je n'arrive pas à la faire fonctionner...

A mon sens la solution la plus proche de ce que je cherche est le LocationMatch, mais impossible de comprendre pourquoi j'ai une 403 en accèdant à la racine http://monserveur/.
Les logs d'erreur en mode debug me donnent :
  • accès à / =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [:error] [pid 8904] [client 192.168.2.93:55483] The URI does not contain the name of a repository.  [403, #190001]
    Bon à la limite c'est tolérable puisque la racine n'est pas un dépôt SVN. Mais si je descend dans http://monserveur/monDepot, j'obtiens =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    apache2: /build/subversion-mUGMjz/subversion-1.8.10/subversion/libsvn_subr/dirent_uri.c:2546: svn_fspath__join: Assertion `svn_fspath__is_canonical(fspath)' failed.
    [core:notice] [pid 9052] AH00052: child pid 9057 exit signal Aborted (6)
  • accès à /svn =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    apache2: /build/subversion-mUGMjz/subversion-1.8.10/subversion/libsvn_subr/dirent_uri.c:2546: svn_fspath__join: Assertion `svn_fspath__is_canonical(fspath)' failed.
    [core:notice] [pid 8899] AH00052: child pid 8903 exit signal Aborted (6)


Bref, avec tout ça je ne sais plus quoi faire. Peut-être qu'un œil extérieur peut apporter une idée brillante !
Merci de votre aide.

PS : Pour aller encore plus loin, idéalement un navigateur web accédant à http://monserveur/ tomberait sur WebSVN, mais un client SVN classique réussirait à interagir avec /var/svn .