2011-03-10 12 views
7

काम नहीं कर रहा है मैं एलडीएपी सक्रिय निर्देशिका के साथ काम कर रहा हूं और सभी उपयोगकर्ताओं को सूचीबद्ध करने की कोशिश कर रहा हूं।एलडीएपी/एडी फ़िल्टर - "ऑब्जेक्ट क्लास बराबर नहीं है"

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

दुर्भाग्य से, हम भी एक कंप्यूटर इकाइयों और अन्य उपकरणों क्लास "उपयोगकर्ता" के साथ ई में मौजूद है, इसलिए पिछले फिल्टर के साथ मुझे मिल गया सभी उपयोगकर्ताओं, कंप्यूटर, उपकरणों, कमरे, आदि: मैं इस फिल्टर जो सही काम करता है

इन कंप्यूटरों और उपकरणों में ऑब्जेक्ट क्लास "कंप्यूटर" भी है, इसलिए मुझे केवल वास्तविक उपयोगकर्ताओं को सूचीबद्ध करने के लिए ऑब्जेक्टक्लास! = "कंप्यूटर" के साथ फ़िल्टर को विस्तारित करने की आवश्यकता है। अब तक मैं इन फिल्टर करने की कोशिश की थी, उनमें से कोई भी (कोई डेटा नहीं दिया!) काम कर रहे:

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

(वास्तविक उपयोगकर्ताओं क्लास "कंप्यूटर" नहीं है)।

मैं PHP ldap कार्यान्वयन के साथ काम कर रहा हूं ताकि ldap_search() विधि का उपयोग कर।

"बराबर नहीं" वाक्यविन्यास पाया गया था उदा। यहां: http://technet.microsoft.com/en-us/library/aa996205%28EXCHG.65%29.aspx या यहां: http://msdn.microsoft.com/en-us/library/aa746475%28v=vs.85%29.aspx

शायद मैं उपयोगकर्ताओं को फ़िल्टर करने का प्रयास कर सकता हूं (! सीएन = कंप्यूटर) डीएन में, लेकिन पहले मैं फ़िल्टर करना चाहता हूं (! objectclass = computer) क्योंकि यह मेरे लिए अधिक तार्किक है।

ऑब्जेक्टक्लास के लिए सही वाक्यविन्यास क्या है! = "कंप्यूटर" अभिव्यक्ति?

उत्तर

18

विपरीत (आप PHP कोड आप में सफेद स्थान को निकालना पड़ सकता है) first link आपके द्वारा दी गई, (!objectclass=computer) एक वैध फिल्टर अभिव्यक्ति नहीं है। यह (!(objectclass=computer)) होना चाहिए। आरएफसी देखें 2254: "!"

फिल्टर :: = "(" filtercomp ")"

नहीं :: = ! (& (objectClass = उपयोगकर्ता) ((objectClass = कंप्यूटर: फ़िल्टर कर

तो अपने फिल्टर

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

बिल्कुल सही, काम करता है !!! बहुत धन्यवाद !!! – shadyyx

3

आप सभी उपयोगकर्ताओं की कोशिश कर रहे हैं, तो आप सिर्फ ऐसा कर सकता है:

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

ऐसा लगता है कि उपयोगकर्ताओं को, जो विशिष्ट समूहों के सदस्य हैं पाने के लिए कोशिश कर रहे हैं और जो एक निर्धारित principalname है (सही?)। यदि हां, तो आप कर सकता है:

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

ये काम मेरी अंत पर करने के लिए

+0

मैं इस एक कोशिश की है होना चाहिए, यह दूसरा फिल्टर मैं कोशिश की है है)) (| (memberOf = ...) (memberOf = ...) ...) (| (userprincipalname = ...) (displayname = ...)) वर्तमान में, ईजेपी का फ़िल्टर काम कर रहा है: (& (! (Objectclass = computer)) (objectclass = user) (| (memberOf = ...) (memberOf = ...) ...) (| (userprincipalname = ...) (displayname =। ..))) – shadyyx