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?

Author: shadyyx, 2011-03-10

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:

Filtro:: = " ("filtercomp") "

Não::="!"filtro

Então o seu filtro deve ser
(&(!(objectclass=computer))(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
 19
Author: user207421, 2017-07-28 01:47:51

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)

 4
Author: dearlbry, 2011-03-10 17:42:53