subversion+apache - правила авторизации в зависимости от IP
Доброго всем времени суток. Возникла интересная задачка - нужно разграничить доступы к svn-репозиторию исходя из ip пришедшего. Т.е. изначальный конфиг следующий:
subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /home/svn
SVNListParentPath On
SSLRequireSSL
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider ldap
AuthLDAPBindDN "administrator@dc.domain.tld"
AuthLDAPBindPassword "rootpw"
AuthLDAPURL "ldap://192.168.0.10:389/cn=Users,dc=dc,dс=domain,dc=tld?sAMAccountName?sub"
AuthLDAPRemoteUserAttribute sAMAccountName
AuthLDAPRemoteUserIsDN off
AuthLDAPGroupAttributeIsDN on
AuthLDAPGroupAttribute member
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require ldap-group CN=svn-committers,CN=Users,DC=dc,DC=domain,DC=tld
</LimitExcept>
</Location>
<Directory /home/svn>
Options +ExecCGI -Includes FollowSymLinks
php_admin_flag engine off
AllowOverride All
Order deny,allow
Deny from none
Allow from all
</Directory>
т.е. неавторизованым юзерам доступно только то, что описано в LimitExcept. На все остальное требуется авторизация. Теперь же мне нужно добавить дополнительно проверку по адресу посетителя - если пришедший не из пространства 127.0.0.1 и 192.168.0.0/24 то затребовать от него авторизацию на все, если же пришедший «свой», то применять к нему ограничения из вышеизложеного конфига.
З.Ы. Пробовал мигрировать на апач 2.4 - все работает отлично, но «затык» вскрылся в самом subverion - вместе с апачем пришлось обновить и модуль вкупе со всеми его зависимостями до версии 1.7.6 (текущая 1.6.11). Стали отваливаться локальные копии пользователей. Лекарство было найдено в виде удаления папок .svn и перезаливки их свежих версий из svn, но 1 - терялась история незакоммиченых изменений, 2 - коммиттеров слишком много, ко всем не применить. Пришлось откатить subversion до 1.6.11, apache до 2.2/
Вот тот конфиг, из которого мб будет понятнеее что конкретно я хочу:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so
<Location /svn>
DAV svn
SVNParentPath /home/svn
SVNListParentPath On
SSLRequireSSL
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider ldap
AuthLDAPBindDN "administrator@dc.domain.tld"
AuthLDAPBindPassword "rootpw"
AuthLDAPURL "ldap://192.168.0.10:389/cn=Users,dc=dc,dс=domain,dc=tld?sAMAccountName?sub"
AuthLDAPRemoteUserAttribute sAMAccountName
AuthLDAPRemoteUserIsDN off
AuthLDAPGroupAttributeIsDN on
AuthLDAPGroupAttribute member
<If "-R '192.168.0.0/24'">
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require ldap-group CN=svn-committers,CN=Users,DC=dc,DC=domain,DC=tld
</LimitExcept>
</If>
<ElseIf "-R '127.0.0.1'">
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require ldap-group CN=svn-committers,CN=Users,DC=dc,DC=domain,DC=tld
</LimitExcept>
</ElseIf>
<Else>
Require ldap-group CN=svn-committers,CN=Users,DC=dc,DC=domain,DC=tld
</Else>
</Location>
<Directory /home/svn>
Options +ExecCGI -Includes -FollowSymLinks
AllowOverride All
Require all denied
</Directory>
Сервер доступен только по https, что осложняет вариант с применением авторизации с помощью реверсных проксей.