OpenLDAP - possível pesquisar sem especificar base?

1

Estou tendo alguns problemas com a segurança do OpenLDAP e do Spring, onde o último faz uma pesquisa com o caminho inteiro em dn (filtro) e uma base vazia. O OpenLDAP não gosta disso e a consulta falha. O problema é que eu não tenho controle sobre a consulta, então estou me perguntando se é possível configurar o OpenLDAP para permitir tais consultas.

Alguns detalhes sobre como isso funciona:

O primeiro Spring faz uma pesquisa por um usuário, com algo parecido com isto:

base:ou=something,ou=something,dc=oh,dc=my,dc=god
filter:cn=someUsername

Então, retorna um resultado, onde o dn inteiro é colocado, e a base é uma String vazia, assim:

base:
filter:cn=someUsername,ou=something,ou=something,dc=oh,dc=my,dc=god

Em seguida, ele usa esse resultado para uma nova pesquisa no LDAP, que falha.

    
por Tobb 08.07.2015 / 09:32

1 resposta

1

O OpenLDAP precisa conhecer o DN base para poder escolher de qual banco de dados ler. Não encontrei nenhum suporte para pesquisa "global" em todos os bancos de dados.

No entanto, você pode adicionar um novo banco de dados com um DN base vazio. Com o backend relay , ele pode encaminhar todas as consultas para o banco de dados principal. Veja slapd-relay (5) para exemplos mais elaborados (incluindo até reescrevendo), mas o uso geral é:

database  relay
suffix    ""
relay     "dc=nullroute,dc=eu,dc=org"
dn: olcDatabase=relay,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcSuffix:
olcRelay: dc=nullroute,dc=eu,dc=org

(Além disso, gostaria de saber se o Spring realmente usa a base vazia para todas pesquisas? Alguns programas obtêm o DSE raiz dessa maneira (localizado na base "", escopo "base"), para descobrir automaticamente os DNs reais e / ou os recursos do servidor.)

Após a atualização, parece que o problema real é o Spring usando um filtro ruim . Não faz sentido apenas enviar um DN como um filtro, porque você realmente acabará procurando por um cn que contenha someUsername,ou=something,dc=something .

Em vez disso, o Spring deve ter usado o DN como base :

base: cn=someUsername,ou=something,ou=something,dc=oh,dc=my,dc=god
scope: base
filter: (objectClass=*)

Se algum dia for necessário filtrar por DN , acredito que uma maneira de trabalhar seria (entryDN=dn) , por exemplo, (entryDN=cn=foo,ou=bar,ou=baz) , embora varie entre servidores (entryDN é específico de OpenLDAP, enquanto AD tem distinguishedName e assim por diante).

    
por 08.07.2015 / 10:01

Tags