Estou tentando produzir um filtro LDAP para MS AD que filtra usuários com base em algumas UOs (no meu caso, excluir uma UO específica, mas também incluir não funciona):
(&(cn=Testuser1)(|(ou:dn:=Included1)(ou:dn:=Included2)))
(&(cn=Testuser1)(!(ou:dn:=Excluded)))
não funciona. Eu testei (ou:dn:=Included1)
o que lista os objetos de "pasta" reais (marcados com * abaixo), mas não os usuários abaixo deles (com o DN contendo o ou). Não consigo usar a base de pesquisa porque ela deve encontrar vários:
ou=Included1,dc=example,dc=com *
cn=Testuser1,ou=Included1,dc=example,dc=com +
ou=Included2,dc=example,dc=com
cn=Testuser1,ou=Included2,dc=example,dc=com +
ou=Excluded,dc=example,dc=com
cn=Testuser1,ou=Excluded,dc=example,dc=com -
Nos meus dois filtros de exemplo acima, quero encontrar duas entradas Testuser1 (marcadas com +), não três (marcadas com -).
Mas na verdade não corresponde a nenhum. As entradas reais do usuário não têm outras diferenças nos atributos que posso filtrar.
A sensação é que a ou:dn:=
sintaxe " " só encontra o objeto onde o primeiro componente do nome é o desejado, e não qualquer ...?
Responder1
O filtro negativo do componente OU= parece não funcionar com o Microsoft LDAP, pois é um atributo construído (graças a @ponto e vírgula pelo link).
No entanto, funciona para usar o valor completo do atributo como:
(&(CN=%u)(!(distinguishedName=CN=%u,OU=Excluded,dc=example,dc=com)))