¿Mezcla Subversion "SVNParentPath" y configuraciones por repositorio?

9

Dada una configuración típica de Subversion / Apache usando SVNParentPath, con repositorios alojados de /svn/esta manera:

<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>

¿Hay alguna forma de anular esta configuración para repositorios específicos sin tener que alojarlos en una ruta diferente? Es decir, ¿hay alguna forma de agregar un Locationbloque como este ...

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

... y tiene que anular la configuración proporcionada en el Locationbloque para /svn? Mis intentos de hacer esto con la configuración anterior se han encontrado con errores extraños e inútiles en el registro de errores de Apache, como:

[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

Todo esto parece ser la forma de mod_dav_svn de decirme que no puedo hacer lo que estoy tratando de hacer. Estoy abierto a soluciones o alternativas!

EDITAR : Bueno, puedo ver que esta pregunta ha generado mucha emoción entre los lectores. Para el registro, lo que puedo terminar haciendo es generar configuraciones por repositorio para todos nuestros repositorios existentes, y luego abandonar la SVNParentPathconfiguración basada. La configuración de Apache por repo es mínima, especialmente usando algo como mod_macro ; La parte difícil será dividir el archivo global de autenticación. Si ha hecho esto antes, se agradecen los consejos.

larsks
fuente
Tengo el mismo problema y lo resolví usando mod_macro. ¡¡¡Gracias!!! (Parece ser un error viejo en Apache o Subversion.)
Achimnol

Respuestas:

4

Odio ver mi propia pregunta languideciendo allí en la lista de preguntas sin respuesta, así que esto es lo que hicimos:

  • En nuestra configuración de servidor principal, tenemos:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Adoptamos lo siguiente mod_macropara replicar este comportamiento para nuevos repositorios:

    <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>
    

    El RewriteRulepermite la configuración de repositorio para anular la <Location /svn/>en la configuración principal que de otro modo que coincida con la petición.

Con esto en su lugar, resulta relativamente fácil adoptar la configuración de autenticación y autorización por repositorio (en lugar del htpasswdarchivo global utilizado aquí).

larsks
fuente
mod_macro rocks
vinnyjames