Usando AuthzSVNAccessFile para controlar o acesso SVN produz HTTP 400 Bad Request

1

Eu tenho um novo repositório em um servidor subversion existente que requer que realizemos uma autorização baseada em caminho dentro do repositório. Descobri que a diretiva AuthzSVNAccessFile no apache é diretamente responsável por permitir essa funcionalidade. Depois de corrigir vários outros problemas, como o AuthzSVNAccessFile, impedindo que o SVNListParentPath funcione corretamente, fico com um único problema. Posso fazer o checkout, posso atualizar, posso confirmar, MAS não consigo executar um SVN COPY para executar operações de ramificação / marcação. No momento em que eu comento a linha AuthzSVNAccessFile na configuração do Apache, tudo funciona como esperado, exceto as autorizações óbvias de caminho.

Versões:

  • O sistema operacional do servidor é Debian 6.0.7 (Squeeze)
  • Apache 2.2.16-6 + squeeze11
  • Servidor Subversion 1.6.12dfsg-7
  • Clientes estão executando janelas
  • Os clientes testados são:
    • TortoiseSVN 1.8.2 Construir 24708 64 bits
    • SVN CLI Client 1.8.3 (r1516576)

A autenticação é realizada via AD para um domínio do Windows 2003 e parece estar funcionando normalmente. Eu removi todas as outras configurações e configurações de repositório para produzir essa configuração única que reproduz o problema.

Configuração do Apache:

<VirtualHost *:443>
    ServerName svn-test.company.com
    ServerAlias /svn-test
    ServerAdmin [email protected]
    SSLEngine On
    SSLCertificateFile /etc/apache2/apache.pem

    ErrorLog /var/log/apache2/svn-test_error.log
    LogLevel warn 
    CustomLog /var/log/apache2/svn-test_access.log combined
    ServerSignature On

    # Repository Access to all Repositories
    <Location "/">
        DAV svn
        SVNParentPath /var/svn
        SVNListParentPath on

        AuthBasicProvider ldap
        AuthType Basic
        AuthzLDAPAuthoritative Off
        AuthName "Subversion Test Repository System"

        AuthLDAPURL "ldap://adserver.company.com:389/DC=corp,DC=company,DC=com?sAMAccountName?sub?(objectClass=*)" NONE
        AuthLDAPBindDN "CN=service_account,OU=ServiceIDs,OU=corp,OU=Delegated,DC=na,DC=corp,DC=company,DC=com"
        AuthLDAPBindPassword service_account_password
        Require valid-user
        SSLRequireSSL
    </Location>

    # <LocationMatch /.+> is a really dirty trick to make listing of repositories work
    # http://d.hatena.ne.jp/shimonoakio/20080130/1201686016
    <LocationMatch /.+>
        AuthzSVNAccessFile /etc/apache2/svn_path_auth
    </LocationMatch>

</VirtualHost>


Arquivo de acesso ao SVN:

[/]
* = rw


O repositório usado (AuthTestBasic) consiste na seguinte estrutura de diretórios e não contém externals (esta é uma listagem literal, não um exemplo):

/
/branches/
/tags/
/trunk/
/trunk/somefile.txt

Tartaruga produz o seguinte erro durante uma operação de tag na janela de resultados da tag:

Adding directory failed: COPY on /authtestbasic/!svn/bc/2/trunk (400 Bad Request)

O cliente CLI svn.exe produz o seguinte erro:

C:\Users\e20epkt>svn copy https://servername/authtestbasic/trunk https://servername/authtestbasic/tags/tag1 -m "svn cli client"
svn: E175002: Adding directory failed: COPY on /authtestbasic/!svn/bc/2/trunk (400 Bad Request)

O log de erros do Apache não tem nada, mas o log de acesso do Apache tem o seguinte (endereços IP e nomes de usuários alterados obviamente):

10.1.2.100 - - [17/Oct/2013:11:53:40 -0700] "OPTIONS /authtestbasic/trunk HTTP/1.1" 401 2595 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "OPTIONS /authtestbasic/trunk HTTP/1.1" 200 996 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "OPTIONS /authtestbasic/trunk HTTP/1.1" 200 884 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/trunk HTTP/1.1" 207 692 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/!svn/vcc/default HTTP/1.1" 207 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "REPORT /authtestbasic/!svn/bc/0/trunk HTTP/1.1" 404 580 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/!svn/vcc/default HTTP/1.1" 207 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "REPORT /authtestbasic/!svn/bc/2/trunk HTTP/1.1" 200 674 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/!svn/bc/2/trunk HTTP/1.1" 207 548 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/tags/tag1 HTTP/1.1" 404 580 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "MKACTIVITY /authtestbasic/!svn/act/f1e9dc07-fb5e-5a41-ac22-907705ef6e5e HTTP/1.1" 201 708 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/tags HTTP/1.1" 207 580 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "CHECKOUT /authtestbasic/!svn/vcc/default HTTP/1.1" 201 708 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPPATCH /authtestbasic/!svn/wbl/f1e9dc07-fb5e-5a41-ac22-907705ef6e5e/2 HTTP/1.1" 207 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "CHECKOUT /authtestbasic/!svn/ver/1/tags HTTP/1.1" 201 724 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "COPY /authtestbasic/!svn/bc/2/trunk HTTP/1.1" 400 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "DELETE /authtestbasic/!svn/act/f1e9dc07-fb5e-5a41-ac22-907705ef6e5e HTTP/1.1" 204 1956 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"

Você verá que a segunda à última linha contém o comando COPY com a resposta HTTP 400, no entanto, não parece haver nenhuma indicação do motivo.

Por favor, note que, embora sim, este é um repositório de teste em um servidor de teste, estou tendo este mesmo problema nesta configuração de teste, onde eliminei todas as outras possíveis causas (configurações mistas de repositórios, externos, etc). Eu também confirmei que todos os arquivos para o repositório (/ var / svn / authtestbasic) são de propriedade do usuário do Apache www-data.

    
por meeper 17.10.2013 / 21:41

1 resposta

0

Este bug descreve o problema com AuthzSVNAccessFile quando combinado com SVNListParentPath , e também menciona que a solução <LocationMatch /.+> quebra os comandos de cópia.

Qual versão do SVN você está executando? Desde que foi corrigido em 2010, espero que as distribuições tenham essa versão incorporada até agora.

    
por 18.10.2013 / 21:41