Использование AuthzSVNAccessFile для управления SVN Access приводит к неверному запросу HTTP 400
У меня есть новый репозиторий на существующем сервере Subversion, который требует от нас выполнения авторизации на основе пути в репозитории. Я обнаружил, что директива AuthzSVNAccessFile в apache напрямую отвечает за разрешение этой функции. После исправления некоторых других проблем, таких как AuthzSVNAccessFile, препятствующих нормальной работе SVNListParentPath, у меня осталась одна проблема. Я могу оформить заказ, я могу обновить, я могу зафиксировать, НО я не могу выполнить SVN COPY для выполнения операций ветвления / тегирования. В тот момент, когда я закомментирую строку AuthzSVNAccessFile в конфигурации Apache, все работает, как и ожидалось, кроме явных авторизаций пути.
Версии:
- Операционная система сервера - Debian 6.0.7 (Squeeze)
- Apache 2.2.16-6 + squeeze11
- Сервер Subversion 1.6.12dfsg-7
- Клиенты бегут окнами
- Клиенты пытались это:
- TortoiseSVN 1.8.2 Build 24708 64bit
- Клиент SVN CLI 1.8.3 (r1516576)
Аутентификация выполняется через AD в домене Windows 2003 и, кажется, работает нормально. Я удалил все другие конфигурации и настройки репозитория, чтобы создать эту единственную конфигурацию, которая воспроизводит проблему.
Конфигурация Apache:
<VirtualHost *:443>
ServerName svn-test.company.com
ServerAlias /svn-test
ServerAdmin me@mycompany.com
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)
Клиент CLI svn.exe выдает следующую ошибку:
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"
Вы увидите, что строка от второй до последней содержит команду COPY с ответом HTTP 400, однако нет никаких указаний на то, почему.
Обратите внимание, что, хотя да, это тестовое хранилище на тестовом сервере, я сталкиваюсь с той же проблемой в этой тестовой настройке, где я устранил все другие возможные причины (смешанные конфигурации хранилища, внешние компоненты и т. Д.). Я также подтвердил, что все файлы для хранилища (/var/svn/authtestbasic) принадлежат пользователю Apache www-data.
1 ответ
Эта ошибка описывает проблему с AuthzSVNAccessFile
в сочетании с SVNListParentPath
, а также упоминает, что <LocationMatch /.+>
Обходной путь ломает команды копирования.
Какую версию SVN вы используете? Так как это было исправлено в 2010 году, я надеюсь, что дистрибутивы уже включили эту версию..