Filtro LDAP/AD - "objectclass não é igual a" não está a funcionar
estou a trabalhar com o directório activo LDAP e a tentar listar todos os utilizadores. Tenho um filtro que funciona perfeitamente.
(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
Infelizmente, também temos unidades de computador e outros dispositivos presentes no anúncio com "usuário" de objectclass, então com o filtro anterior tenho todos os usuários, computadores, dispositivos, salas, etc.
estes computadores e dispositivos também têm uma classe de objectos "computador" por isso preciso de estender o filtro com classe de objectos!= "computador" a fim de listar apenas usuários reais. Até agora eu tentei estes filtros, nenhum deles funcionando (nenhum dado retornado!):
(&(objectclass=user)(!objectclass=computer)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(&(objectclass=user)(!(objectclass=computer))(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!(objectclass=computer))(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!objectclass=computer)(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(os utilizadores reais não têm a classe de objectos "computador").
estou a trabalhar com a implementação do PHP ldap por isso, usando um método ldap_search()
.
a sintaxe" não igual a " foi encontrada por exemplo aqui: http://technet.microsoft.com/en-us/library/aa996205%28EXCHG.65%29.aspx ou aqui: http://msdn.microsoft.com/en-us/library/aa746475%28v=vs.85%29.aspx
Talvez eu possa tentar filtrar os utilizadores onde (!CN = computadores) em DN, mas primeiro eu gostaria de filtrar (!objectclass = computer) como é mais lógico para mim.Qual é a sintaxe correcta para objectclass != "computador" expressão?
2 answers
Ao contrário da primeira ligação {[6] } que forneceu, (!objectclass=computer)
não é uma expressão de filtro válida. Deve ser. Ver RFC 2254:
Então o seu filtro deve serFiltro:: = " ("filtercomp") "
Não::="!"filtro
(&(!(objectclass=computer))(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
Se está a tentar obter todos os utilizadores, pode fazer isto:
(&
(objectclass=user)
(!(objectClass=computer))
)
Parece que você está tentando obter usuários que são membros de grupos específicos e que têm um nome de princípio especificado (certo?). Em caso afirmativo, pode fazer o seguinte:
(&
(objectclass=user)
(!(objectClass=computer))
(|
([email protected])
(displayName=John Doe)
)
(|
(memberOf=CN\=group1,CN\=Groups,DC\=domain,DC\=com)
(memberOf=CN\=group2,CN\=Groups,DC\=domain,DC\=com)
)
)
Estes trabalhos no meu fim (poderá ter de remover espaços em branco no seu código PHP)