Apache, SVN e Active Directory: como evitar a configuração duplicada?

2

Estou tentando vincular o SVN hospedado no Apache em um Windows Server 2008 ao Active Directory.

Eu entendi o que preciso fazer para gerenciar os grupos de usuários no nível do repositório:

<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 [email protected]."
  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 [email protected]."
  require ldap-group CN=Subversion Administrators,OU=Subversion,DC=...,DC=com
</location>

O que me incomoda é que há duplicação de mach também: se SVNPath e ldap-group s mudarem de repositório para repositório, todo o resto permanece o mesmo.

Como evitar a duplicação de código e autorizar alguns repositórios para diferentes grupos?

    
por Arseni Mourzenko 20.08.2011 / 04:30

1 resposta

2

Suas preocupações derivam da visualização da configuração do Apache como código; não é. Você vai ficar louco se pensar a partir dessa perspectiva.

Não há estrutura lógica, apenas algumas construções condicionais rudimentares em certos comandos individuais, e próximo a nenhuma manipulação de variáveis. Todas as coisas que permitem que uma linguagem de programação permita que você evite a duplicação de código e melhore o fluxo da lógica simplesmente não estão presentes, por design; é apenas um arquivo de configuração, afinal de contas - alguns argumentariam que é muito flexível (e, portanto, muito fácil transformar uma configuração em uma grande bagunça sem sentido) como é.

Dito isso, você pode reduzir muito a configuração que você tem lá, aplicando apenas algumas de suas diretivas a um pai desse caminho de URL; supondo que você possa aplicar essas diretivas com segurança a / e que essas diretivas se aplicam a todos os repositórios do sistema:

<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 [email protected]."
</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>

Todos os blocos <Location> que correspondem a uma solicitação aplicarão suas diretivas a ela (na ordem em que o arquivo os inclui), o que significa que você pode dividir muito da configuração comum em um caminho pai aplicável.

    
por 20.08.2011 / 09:37