2011-03-10 14 views
7

LDAP Active Directory ile çalışıyorum ve tüm kullanıcıları listelemeye çalışıyorum.LDAP/AD filtresi - "objectclass not equal to" çalışmıyor

(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...))) 

Maalesef biz de objectclass "kullanıcı" ile AD mevcut bir bilgisayar birimleri ve diğer aygıtları var bu yüzden önceki filtreli aldığım tüm kullanıcılar, bilgisayarlar, cihazlar, odalar vs.: Ben mükemmel çalışır bu filtreyi var

Bu bilgisayar ve aygıtlar ayrıca bir "object" nesnesine de sahiptir, bu yüzden filtreyi yalnızca gerçek kullanıcıları listelemek için objectclass! = "Computer" ile genişletmem gerekiyor.

(&(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=...))) 

(gerçek kullanıcıların objectClass "bilgisayar" gerekmez): Şimdiye kadar bunların hiçbiri (! Hiçbir veri döndürdü) çalışma, bu filtreleri çalışmıştı.

ldap_search() yöntemini kullanarak PHP ldap uygulamasıyla çalışıyorum.

"Eşit değil" sözdizimi, ör. burada: http://technet.microsoft.com/en-us/library/aa996205%28EXCHG.65%29.aspx veya burada: http://msdn.microsoft.com/en-us/library/aa746475%28v=vs.85%29.aspx

Belki de (! CN = Bilgisayarlar) nerede DN kullanıcıları filtrelemeyi deneyebilirsiniz, ancak önce filtreleme yapmak istiyorum (! objectclass = bilgisayar) benim için daha mantıklı.

objectClass! = "Bilgisayar" ifadesi için doğru sözdizimi nedir? Eğer tüm kullanıcıları almaya çalışıyorsanız

cevap

18

aykırı (senin içinde PHP kodu boşluğu kaldırmak gerekebilir) first link Eğer (!objectclass=computer) geçerli bir filtre ifadesi değildir sağladı. (!(objectclass=computer)) olmalıdır. Bkz RFC 2254: "!"

filtre :: = "(" filtercomp ")"

değil :: = ! (& (objectclass = kullanıcı) ((objectclass = bilgisayar:

Yani filtre Ben bunu denedim

(&(!(objectclass=computer))(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...))) 
+1

Mükemmel, işe yarıyor! Çok teşekkürler! – shadyyx

3

, sadece bunu:

(& 
    (objectclass=user) 
    (!(objectClass=computer)) 
) 

görünüyor belirli grupların üyesi olan kullanıcıları almaya çalışırken VE kim konum gibi belirli bir principalname var (sağ?). Eğer öyleyse, yapabileceği:

(& 
    (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) 
    ) 
) 

Bu çalışma benim ucunda için

+0

olmalıdır filtre, ben denedim ikinci filtredir)) (| (memberOf = ...) (memberOf = ...) ...) (| (userprincipalname = ...) (displayname = ...))) Şu anda EJP'nin filtresi çalışıyor: (& (! (Objectclass = bilgisayar)) (objectclass = user) (| (memberOf = ...) (memberOf = ...) ...) (| (userprincipalname = ...) (displayname =. ..))) – shadyyx

İlgili konular