Apache-2.2

Apache、SVN 和 Active Directory:如何避免重複配置?

  • August 20, 2011

我正在嘗試將 Windows Server 2008 上的 Apache 上託管的 SVN 連結到 Active Directory。

我了解在儲存庫級別管理使用者組需要做什麼:

<Location "/SampleRepository1">
 DAV svn
 SVNPath H:/Repositories/SampleDirectory1
 AuthBasicProvider ldap
 AuthzLDAPAuthoritative Off
 AuthLDAPURL "ldap://.../DC=...,DC=com?sAMAccountName?sub?(objectClass=*)" none
 AuthLDAPBindDN "CN=Subversion,OU=Subversion,DC=...,DC=com"
 AuthLDAPBindPassword "..."
 AuthType Basic
 AuthName "Use your sAMAccountName to connect. If you're unsure, write to contact@...com."
 require ldap-group CN=Subversion OpenSource Contributors,OU=Subversion,DC=...,DC=com
 require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</location>

<Location "/SampleRepository2">
 DAV svn
 SVNPath H:/Repositories/SampleDirectory2
 AuthBasicProvider ldap
 AuthzLDAPAuthoritative Off
 AuthLDAPURL "ldap://.../DC=...,DC=com?sAMAccountName?sub?(objectClass=*)" none
 AuthLDAPBindDN "CN=Subversion,OU=Subversion,DC=...,DC=com"
 AuthLDAPBindPassword "..."
 AuthType Basic
 AuthName "Use your sAMAccountName to connect. If you're unsure, write to contact@...com."
 require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</location>

令我困擾的是,重複太多了:如果SVNPathldap-groups 從儲存庫更改為儲存庫,其他一切都保持不變。

如何避免重複程式碼,同時能夠將一些儲存庫授權給不同的組?

您的擔憂源於將 Apache 的配置視為程式碼;不是。如果你從這個角度考慮,你會把自己逼瘋的。

沒有邏輯結構,只有某些單個命令的一些基本條件結構,幾乎沒有變數操作。所有讓程式語言能夠讓您避免程式碼重複和改進邏輯流程的東西在設計上都不存在。畢竟,它只是一個配置文件——有些人會認為它太靈活了(因此,太容易將配置變成一個巨大的無意義的混亂)。

也就是說,您只需將一些指令應用於該 URL 路徑的父級,就可以減少很多配置;假設您可以安全地將這些指令應用於/,並且這些指令適用於系統中的每個儲存庫:

<Location "/">
 DAV svn
 AuthBasicProvider ldap
 AuthzLDAPAuthoritative Off
 AuthLDAPURL "ldap://.../DC=...,DC=com?sAMAccountName?sub?(objectClass=*)" none
 AuthLDAPBindDN "CN=Subversion,OU=Subversion,DC=...,DC=com"
 AuthLDAPBindPassword "..."
 AuthType Basic
 AuthName "Use your sAMAccountName to connect. If you're unsure, write to contact@...com."
</Location>

<Location "/SampleRepository1">
 SVNPath H:/Repositories/SampleDirectory1
 require ldap-group CN=Subversion OpenSource Contributors,OU=Subversion,DC=...,DC=com
 require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</Location>

<Location "/SampleRepository2">
 SVNPath H:/Repositories/SampleDirectory2
 require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</Location>

與請求匹配的所有<Location>塊都將對其應用指令(按照文件中的順序),這意味著您可以將許多通用配置拆分為適用的父路徑。

引用自:https://serverfault.com/questions/303254