Mélanger Subversion «SVNParentPath» et les configurations par référentiel?

9

Étant donné une configuration Subversion / Apache typique utilisant SVNParentPath, avec des référentiels hébergés sous /svn/comme ceci:

<Location /svn>
    DAV svn

    SVNParentPath /srv/source/svn/repos
    SVNReposName "Subversion Repository"

    AuthzSVNAccessFile /srv/source/svn/authz
    Satisfy Any

    AuthType                Basic
    AuthBasicProvider       file
    AuthName "Subversion Repository"
    AuthUserFile /srv/source/svn/htpasswd

    Require valid-user
</Location>

Existe-t-il un moyen de remplacer cette configuration pour des référentiels spécifiques sans avoir à les héberger sur un chemin différent? Autrement dit, est-il possible d'ajouter un Locationbloc comme celui-ci ...

<Location /svn/my_special_repo>
    SVNPath /srv/source/svn/repos/my_special_repo
    AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>

... et la remplacer par la configuration fournie dans le Locationbloc pour /svn? Mes tentatives pour ce faire avec la configuration ci-dessus ont rencontré des erreurs étranges et inutiles dans le journal des erreurs Apache, telles que:

[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120]
(20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format':
No such file or directory

Tout cela semble être la façon dont mod_dav_svn me dit que je ne peux pas faire ce que j'essaie de faire. Je suis ouvert aux solutions ou alternatives!

EDIT : Eh bien, je peux voir que cette question a suscité beaucoup d'enthousiasme parmi les lecteurs. Pour mémoire, je pourrais finir par générer des configurations par référentiel pour tous nos référentiels existants, puis abandonner la SVNParentPathconfiguration basée. La configuration Apache par repo est minimale, en particulier en utilisant quelque chose comme mod_macro ; la partie difficile divisera le fichier authz global. Si vous l'avez déjà fait, les conseils sont appréciés.

larsks
la source
J'ai le même problème et je l'ai résolu en utilisant mod_macro. Merci!!! (Il semble que ce soit un vieux bogue dans Apache ou Subversion.)
Achimnol

Réponses:

4

Je déteste voir ma propre question languir là dans la liste des questions sans réponse, alors voici ce que nous avons fait:

  • Dans notre configuration de serveur principale, nous avons:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Nous avons adopté ce qui suit mod_macropour reproduire ce comportement pour les nouveaux référentiels:

    <Macro LegacySubversionRepo $name>
        # Override SVNParentPath block in main vhost config.
        RewriteRule ^/svn/$name /repo/$name [PT]
    
        <Location /repo/$name>
                Order                   deny,allow
                Allow                   from all
    
                Use LdapAuth \
                        "$name svn repository" \
                        /srv/source/svn/htpasswd
    
                DAV svn
                SVNPath /srv/source/svn/repos/$name
                AuthzSVNAccessFile /srv/source/svn/authz
                SVNAutoversioning On
                Satisfy Any
        </Location>
    </Macro>
    

    Le RewriteRulepermet à la configuration du référentiel de remplacer la <Location /svn/>configuration principale qui correspondrait autrement à la demande.

Avec cela en place, il devient relativement facile d'adopter la configuration d'authentification et d'autorisation par référentiel (au lieu du htpasswdfichier global utilisé ici).

larsks
la source
mod_macro rocks
vinnyjames