2008-10-28 13 views
5

मुझे हमारी कंपनी एलडीएपी सर्वर के खिलाफ एक जटिल क्वेरी चलाने में परेशानी हो रही है। मैं निम्नलिखित पर्ल स्क्रिप्ट का उपयोग कर रहा हूँ:मैं पर्ल के नेट :: एलडीएपी के साथ एक जटिल क्वेरी कैसे बना सकता हूं?

use Data::Dumper; 
use Net::LDAP; 

die "Can't connect to LDAP-Server: [email protected]\n" 
    unless $ldap = Net::LDAP->new('xLDAPx'); 


foreach my $filter ('ou=Personal', 'ou=BAR', 'ou=Personal,ou=BAR', 'ou=Personal,ou=FOO,o=FOO,dc=foo,dc=com') 
{ 
    $mesg = $ldap->search(base => "o=FOO,dc=foo,dc=com", filter => $filter); 
    print Dumper($mesg), "\n\n"; 
} 

पहले दो फिल्टर काम (अपेक्षित मानों लौटने के रूप में) पिछले और परिसर में एक ऐसा नहीं करता है। यह एक खाली सरणी देता है। वास्तव में मुझे क्या पहेली है कि मैं वही क्वेरी स्ट्रिंग काम करता हूं जब मैं इसे सॉफ़्ट्रा एलडीएपी ब्राउज़र जैसे टूल के साथ उपयोग करता हूं।

मैंने PHP के ldap_search & सह का उपयोग करके एक ही क्वेरी का प्रयास किया है, कोई फायदा नहीं हुआ।

क्या कोई इस पर कुछ प्रकाश डाल सकता है?

पढ़ने

Holli

संपादित करने के लिए धन्यवाद: यह सर्वर की संरचना है:

Server 
    ou=FOO 
     ou=... 
     ou=Personal 
      uid=something 

मैं UIDs की एक सूची की जरूरत है।

+0

हमेशा 'सख्त उपयोग करें', और 'चेतावनियों का उपयोग करें;'। –

उत्तर

5

मुझे लगता है कि आप इसे (&(ou=Personal)(ou=FOO)(o=FOO)(dc=foo)(dc=com)) की तरह अधिक होना चाहते हैं। लेकिन आप जो भी चाहते हैं उस पर बिल्कुल स्पष्ट नहीं हैं, इसलिए मैं आपके लिए फ़िल्टर नहीं बना सकता। जोड़ने के लिए

संपादित: मेरा अनुमान है कि यह है कि क्या आप क्या करना चाहते है: (|(ou=Personal)(ou=FOO))

+0

एलडीएपी में कोई भी ऑब्जेक्ट ऐसे फ़िल्टर से मेल नहीं खाएगा। इसके अलावा, आप एक बंद माता पिता खो रहे हैं। :-) – Tomalak

+0

शायद नहीं, हालांकि यह मिल सकता है, यह सिर्फ एक वाक्य रचनात्मक उदाहरण था। जैसे मैंने कहा, यह सवाल से मुझे स्पष्ट नहीं है कि वह वास्तव में क्या चाहता है। –

4

कारण यह है कि आप सिंटैक्टिक रूप से फिल्टर तारों को सही नहीं कर रहे हैं, लेकिन डीएन के कुछ हिस्सों को उपलब्ध नहीं करा रहे हैं। मैं एलडीएपी ब्राउज़र में इस काम की कल्पना नहीं कर सकता - मैंने सफलता के बिना खुद को कोशिश की।

पहले दो सही फ़िल्टर स्ट्रिंग हैं। वे "({विशेषता} = {value})" फैशन में एक ऑब्जेक्ट विशेषता पर फ़िल्टर करते हैं। पहला ("कहां = व्यक्तिगत") आपके खोज आधार के भीतर "व्यक्तिगत" नामक किसी ओयू को वापस कर देगा।

यदि आप अधिक जानकारी में बताते हैं कि आप क्या खोज रहे हैं तो मैं शायद आपको बता सकता हूं कि आपको कौन सी फ़िल्टर अभिव्यक्ति की आवश्यकता है।

+0

ओपी – holli

+0

में सर्वर संरचना जोड़ा गया मुझे खेद है, लेकिन सवाल अभी भी स्पष्ट नहीं है। आपके संदर्भ में "यूआईडी" क्या हैं? ऑब्जेक्ट्स अपने स्वयं के अधिकार में, या विभिन्न वस्तुओं के गुण? – Tomalak

2

एक फिल्टर है कि RFC 2254 के अनुरूप लिखें और फिर देखो क्या होता है। आपको एक जटिल क्वेरी की आवश्यकता नहीं है, आप एक शाखा के तहत प्रत्येक प्रविष्टि के लिए एक विशेषता चाहते हैं। खोज विधि के लिए attrs तर्क देखें।

संबंधित मुद्दे