2011-12-20 11 views
7

के साथ एलडीएपी से सभी समूह कैसे पुनर्प्राप्त करें मेरे पास एक पर्ल स्क्रिप्ट है जो एक एलडीएपी सर्वर से जुड़ती है और सभी उपयोगकर्ताओं को पुनर्प्राप्त करती है। अब तक यह अच्छा काम करता है लेकिन मैं सभी समूहों को इकट्ठा करने के लिए उस खोज को फ़िल्टर करना चाहता हूं। एक बार मेरे पास सभी समूह होने के बाद उपयोगकर्ता इन समूहों में से एक का चयन कर सकता है और मैं उसे केवल उन उपयोगकर्ताओं को दिखाऊंगा जो उस समूह के सदस्य हैं। मैं उन प्रश्नों को कैसे कर सकता हूं? मैं tryed इस एक:पर्ल

my $mesg = $ldap->search(
    base => $base, 
    filter => '(objectclass=user)', 
    attrs => ['memberOf'] 
); 

लेकिन फिर कुछ समूहों दोहराया जाता है और मैं मैन्युअल रूप से परिणाम को फ़िल्टर करना होगा (और मुझे लगता है कि बचना चाहते हैं)। और दूसरी क्वेरी के बारे में क्या?

उत्तर

6

cnThe फिल्टर सभी समूहों प्राप्त करने के लिए "(objectclass=group)" आप सभी उप-संगठन में केवल एक ही ऑरगेनाइजेशनलयूनिट (गुंजाइश => 'एक') या समूहों पुनर्प्राप्त कर सकते हैं (स्कोप => 'उप')

$mesg = $ldap->search( filter=>"(&(objectclass=group)(cn=the group choosen by the user)", 
         base=>"ou=Monou,dc=societe,dc=fr" 
         scope=>"sub" 
         attrs=> ['cn', 'member']); 
@entries = $mesg->entries; 
foreach $entry (@entries) 
{ 
    $entry->dump; 
    @member = $entry->get_value("member"); # returns all members 
} 

अधिक मदद के लिए An Introduction to perl-ldap


देखना संपादित

तो जिस फ़िल्टर को आप ढूंढ रहे थे वह है:

(&(objectClass=user)(memberof=CN=Mongroupe,OU=MonOU,DC=societe,DC=fr)) 
+0

पहली क्वेरी ठीक काम करती है (मैंने सभी समूहों को पुनर्प्राप्त किया) लेकिन मुझे किसी दिए गए समूह से उपयोगकर्ताओं का चयन करने का कोई तरीका नहीं मिल रहा है, कोई सदस्य विशेषता नहीं है। मैंने * objectclass = user * और * memberOf = group के साथ एक प्रश्न का प्रयास किया * लेकिन यह काम नहीं करता है :( – raz3r

+1

गोर किसी दिए गए समूह में, सदस्य विशेषता में सदस्यों का विशिष्ट नाम होता है। – JPBlanc

+0

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

3

सभी प्राप्त करने के लिए objectclass = * का उपयोग करें।

my $msg = $ldap->search(base => $dn, 
      scope => 'one', 
      filter => "(objectclass=*)"); 
$msg->all_entries;   
+0

अच्छा! और मेरे दूसरे प्रश्न के बारे में क्या? मैं चुने गए समूह से सभी उपयोगकर्ताओं का चयन कैसे कर सकता हूं? – raz3r

+0

उम .. यह खोज समूह नहीं लौटाती है, कुछ और चीज बरकरार रखती है लेकिन मुझे समझ में नहीं आता है। क्या आप निश्चित हैं कि दायरा और फ़िल्टर सही हैं? – raz3r

+0

यहां फ़िल्टर हर वर्ग की वस्तुओं को वापस कर रहा है। आप एक और विशिष्ट फिल्टर चाहते हैं। उदाहरण के लिए, '& (objectCategory = Group) (समूह प्रकार: 1.2.840.113556.1.4.803: = 2147483648)' न केवल समूहों को प्राप्त करेगा, बल्कि यह आपको वैसे भी सुरक्षा समूह, वितरण सूची नहीं, एडी में भी मिलेगा। – Mik