使用 AuthzSVNAccessFile 控制 SVN Access 产生 HTTP 400 错误请求

使用 AuthzSVNAccessFile 控制 SVN Access 产生 HTTP 400 错误请求

我在现有的 Subversion 服务器上有一个新的存储库,需要我们在存储库内执行基于路径的授权。我发现 apache 中的 AuthzSVNAccessFile 指令直接负责允许此功能。在修复了其他几个问题(例如 AuthzSVNAccessFile 阻止 SVNListParentPath 正常运行)后,我只剩下一个问题。我可以签出、可以更新、可以提交,但我无法执行 SVN COPY 来执行分支/标记操作。当我在 Apache 配置中注释掉 AuthzSVNAccessFile 行时,除了明显的路径授权外,一切都按预期运行。

版本:

  • 服务器操作系统是 Debian 6.0.7 (Squeeze)
  • Apache 2.2.16-6+squeeze11
  • 服务器 Subversion 1.6.12dfsg-7
  • 客户端运行的是 Windows
  • 尝试过的客户有:
    • TortoiseSVN 1.8.2 Build 24708 64位
    • SVN CLI 客户端 1.8.3(r1516576)

身份验证通过 AD 执行到 Windows 2003 域,似乎运行正常。我已删除所有其他配置和存储库设置,以生成此重现问题的单一配置。

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>


SVN访问文件:

[/]
* = rw


使用的存储库(AuthTestBasic)由以下目录结构组成,不包含任何外部内容(这是一个文字列表,而不是示例):

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

Tortoise 在标签结果窗口的标签操作过程中产生以下错误:

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

svn.exe CLI 客户端产生以下错误:

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)

Apache 错误日志中没有任何内容,但是 Apache 访问日志中包含以下内容(IP 地址和用户名显然发生了变化):

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"

您会看到倒数第二行包含带有 HTTP 400 响应的 COPY 命令,但是,似乎没有任何迹象表明原因。

请注意,虽然这是测试服务器上的测试存储库,但我在此测试设置中遇到了同样的问题,我已排除了所有其他可能的原因(混合存储库配置、外部等)。我还确认存储库 (/var/svn/authtestbasic) 的所有文件均归 Apache 用户 www-data 所有。

答案1

这个错误AuthzSVNAccessFile描述了与结合时出现的问题SVNListParentPath,同时还提到该<LocationMatch /.+>解决方法会破坏复制命令。

你运行的是哪个版本的 SVN?由于 2010 年已经修补了该版本,我希望发行版现在已经整合了该版本。

相关内容