LDAP सेटिंग्स
From LimeSurvey Manual
सामान्य
इस फ़ंक्शन का उपयोग करने के लिए आपको config.php में LDAP सपोर्ट सक्षम करना होगा और config/ldap.php में LDAP पैरामीटर कॉन्फ़िगर करने होंगे।
config.php में LDAP सक्षम करना
- $enableLdap: यदि आप LimeSurvey में LDAP फ़ंक्शन का उपयोग करना चाहते हैं, तो आपको इस पैरामीटर को true पर सेट करना होगा (डिफ़ॉल्ट रूप से यह false पर सेट होता है):
'config'=>array( 'debug'=>0, 'debugsql'=>0, 'enableLdap'=>true, )
LDAP सर्वर परिभाषित करना
सबसे पहले "application/config/ldap.php" में LDAP सर्वर कनेक्शन विकल्प परिभाषित करें। प्रत्येक सर्वर के लिए निम्नलिखित विकल्प उपलब्ध हैं:
- $serverId: एक पूर्णांक जो इस LDAP सर्वर की पहचान करता है। इसका उपयोग क्वेरी परिभाषाओं में किसी सर्वर को विशिष्ट क्वेरी से जोड़ने के लिए किया जाता है;
- $ldap_server[$serverId]['server']: LDAP सर्वर का आईपी पता या DNS नाम। यदि आप SSL सुरक्षित कनेक्शन (LDAPs या LDAP+Start-TLS) का उपयोग करते हैं, तो यह नाम सर्वर के प्रमाणपत्र CN (या SubjectAlternativeName) से मेल खाना चाहिए;
- $ldap_server[$serverId]['port']: वह TCP पोर्ट जिस पर LDAP सर्वर सुनता है। यह आमतौर पर LDAP और LDAP+Start-TLS के लिए 389 और LDAPs के लिए 636 होता है;
- $ldap_server[$serverId]['protoversion']: आपके सर्वर द्वारा समर्थित प्रोटोकॉल के आधार पर 'ldapv2' या 'ldapv3' हो सकता है। 'ldapv3' पसंदीदा प्रोटोकॉल है। हालाँकि, यदि आप एन्क्रिप्टेड कनेक्शन का उपयोग करना चाहते हैं, तो ध्यान दें कि LDAPs 'ldapv2' मोड में समर्थित है, जबकि Start-TLS 'ldapv3' के लिए एन्क्रिप्शन विधि है;
- $ldap_server[$serverId]['encrypt']: उपयोग की जाने वाली एन्क्रिप्शन विधि को परिभाषित करता है। 'ldaps' 'ldapv2' सर्वर के लिए और 'start-tls' 'ldapv3' सर्वर के लिए समर्थित है। 'none' कीवर्ड का उपयोग क्लियरटेक्स्ट LDAP संचार के लिए किया जाता है;
- यह न भूलें कि 'ldaps' या 'start-tls' एन्क्रिप्शन के लिए वेबसर्वर को LDAP सर्वर का प्रमाणपत्र जाँचने में सक्षम होना चाहिए। इसलिए, आपको अपनी openldap लाइब्रेरी में अपनी सर्टिफ़िकेट अथॉरिटी परिभाषित करनी होगी (लिनक्स में यह आमतौर पर /etc/openldap/ldap.conf फ़ाइल में किया जाता है)।
- $ldap_server[$serverId]['referrals']: यह एक बूलियन पैरामीटर है जो परिभाषित करता है कि रेफ़रल्स का अनुसरण किया जाए या नहीं (ActiveDirectory के लिए false का उपयोग करें);
- $ldap_server[$serverId]['encoding']: यह एक वैकल्पिक पैरामीटर है जो स्ट्रिंग संग्रहीत करने के लिए LDAP डायरेक्टरी द्वारा उपयोग की जाने वाली एन्कोडिंग बताता है। आमतौर पर आपको इस पैरामीटर को सेट करने की आवश्यकता नहीं होती, क्योंकि डिफ़ॉल्ट रूप से मानी गई एन्कोडिंग 'utf-8' LDAP डायरेक्टरी की मानक एन्कोडिंग है। हालाँकि, यदि आप Active Directory का उपयोग कर रहे हैं और उच्चारण चिह्नों वाली स्ट्रिंग इंपोर्ट करने में समस्या आ रही है, तो इस पैरामीटर को अपने क्षेत्र में उपयोग की जाने वाली एन्कोडिंग पर सेट करके देखें (उदाहरण के लिए पश्चिमी यूरोप के लिए 'cp850')। समर्थित एन्कोडिंग की पूरी सूची के लिए आप CSV फ़ाइल से टोकन इंपोर्ट करें GUI में "फ़ाइल का कैरेक्टर सेट" ड्रॉपडाउन सूची देख सकते हैं।
इसके बाद, आपको परिभाषित करना होगा कि डायरेक्टरी तक पहुँचने के लिए किस प्रमाणीकरण की आवश्यकता है। यदि 'anonymous' एक्सेस की अनुमति है, तो निम्नलिखित दो पैरामीटर सेट न करें; अन्यथा उन्हें उचित रूप से सेट करें:
- $ldap_server[$serverId]['binddn']: उस 'LDAP' उपयोगकर्ता का DN जिसे डायरेक्टरी पढ़ने की अनुमति है;
- $ldap_server[$serverId]['bindpw']: ऊपर दिए गए LDAP उपयोगकर्ता का पासवर्ड।
यदि आपको अन्य LDAP सर्वर परिभाषित करने हैं, तो serverID बढ़ाने और नए पैरामीटर परिभाषित करने के लिए निम्नलिखित पंक्ति जोड़ें:
- $serverId++.
config/ldap.php में क्वेरी परिभाषित करना
सावधानी: जब इन पैरामीटर में किसी ldap विशेषता नाम की आवश्यकता हो, तो केवल छोटे अक्षरों (lower case) वाले नाम का उपयोग करें: उदाहरण के लिए displayname, न कि displayName।
कृपया config/ldap.php फ़ाइल देखें, क्योंकि उसमें नमूना कॉन्फ़िगरेशन दिए गए हैं।
सरल क्वेरी
आइए सरल क्वेरी से शुरू करें। ये क्वेरी LDAP प्रविष्टियों को केवल उनकी अपनी विशेषताओं और स्थान के आधार पर फ़िल्टर करती हैं। ActiveDirectory को क्वेरी करने के लिए ये आमतौर पर पर्याप्त होती हैं।
- $query_id: LDAP क्वेरी की id है;
- $ldap_queries[$query_id]['ldapServerId']: क्वेरी को किसी विशिष्ट सर्वर से जोड़ता है;
- $ldap_queries[$query_id]['name']: क्वेरी का वर्णन करने वाली स्ट्रिंग। यह GUI में प्रदर्शित होगी;
- $ldap_queries[$query_id]['userbase']: उपयोगकर्ता खोज के लिए उपयोग किया जाने वाला रूट DN;
- $ldap_queries[$query_id]['userfilter']: यह संभावित उपयोगकर्ता प्रविष्टियों को चुनने के लिए उपयोग किया जाने वाला फ़िल्टर है। इसे कोष्ठकों में रखना आवश्यक है;
- $ldap_queries[$query_id]['userscope']: उपयोगकर्ताओं के लिए LDAP खोज का दायरा ('base', 'one' या 'sub');
- $ldap_queries[$query_id]['firstname_attr']: Ldap विशेषता जो टोकन प्रविष्टि के Firstname फ़ील्ड से मैप की जाएगी;
- $ldap_queries[$query_id]['lastname_attr']: Ldap विशेषता जो टोकन प्रविष्टि के Lastname फ़ील्ड से मैप की जाएगी;
- $ldap_queries[$query_id]['email_attr']: Ldap विशेषता जो टोकन प्रविष्टि के ईमेल पता फ़ील्ड से मैप की जाएगी।
वैकल्पिक रूप से, आप डायरेक्टरी से अधिक जानकारी प्राप्त कर सकते हैं:
- $ldap_queries[$query_id]['token_attr']: Ldap विशेषता जो टोकन कोड से मैप की जाएगी;
- $ldap_queries[$query_id]['language']: Ldap विशेषता जो उपयोगकर्ता के भाषा कोड से मैप की जाएगी;
- $ldap_queries[$query_id]['attr1']: Ldap विशेषता जो attribute_1 फ़ील्ड से मैप की जाएगी;
- $ldap_queries[$query_id]['attr2']: Ldap विशेषता जो attribute_2 फ़ील्ड से मैप की जाएगी।
DN सदस्यों वाली संयुक्त समूह क्वेरी
आइए अब देखें कि अधिक जटिल क्वेरी कैसे परिभाषित की जाती है।
निम्नलिखित क्वेरी पहली LDAP खोज का उपयोग करती हैं जो LDAP समूहों में देखती है। LDAP समूह एक LDAP प्रविष्टि होती है जिसमें उपयोगकर्ता प्रविष्टियों के संदर्भ इन रूपों में होते हैं:
- उपयोगकर्ता id (उदाहरण के लिए posixGroups में) ==> अगला अनुभाग देखें
- या उपयोगकर्ता DN (उदाहरण के लिए groupofnames और groupofuniquenames में) ==> नीचे देखें
यहाँ हम उन समूहों की बात कर रहे हैं जिनमें उपयोगकर्ता DN होते हैं:
- $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['name'] को ऊपर बताए अनुसार परिभाषित करें।
फिर समूह फ़िल्टर पैरामीटर परिभाषित करें:
- $ldap_queries[$query_id]['groupbase']: वह रूट DN जहाँ से आप समूह प्रविष्टियों की खोज शुरू करना चाहते हैं;
- $ldap_queries[$query_id]['groupfilter']: वह LDAP फ़िल्टर जो संभावित समूह प्रविष्टियों को चुनेगा;
- $ldap_queries[$query_id]['groupscope']: समूहों के लिए LDAP खोज का दायरा ('one', 'base' या 'sub');
- $ldap_queries[$query_id]['groupmemberattr']: समूह प्रविष्टि में उस LDAP विशेषता का नाम जिसमें उपयोगकर्ता प्रविष्टियों के संदर्भ होंगे;
- $ldap_queries[$query_id]['groupmemberisdn']: TRUE।
इस बिंदु पर, पहली LDAP खोज को चुने गए समूहों से संबंधित उपयोगकर्ता खोजने देने के लिए सब कुछ सेट हो चुका है। हालाँकि, आप इन "उपयोगकर्ता उम्मीदवारों" पर एक और फ़िल्टर लगाकर यह सीमित कर सकते हैं कि इनमें से कौन चुने जाएँगे। यह निश्चित रूप से वैकल्पिक है:
- $ldap_queries[$query_id]['userbase']: उपयोगकर्ता LDAP खोज के लिए बेस DN (केवल इस बेस से मेल खाने वाले उपयोगकर्ता उम्मीदवार चुने जाएँगे);
- $ldap_queries[$query_id]['userscope']: उपयोगकर्ता LDAP खोज का दायरा (केवल userbase+scope से मेल खाने वाले उपयोगकर्ता उम्मीदवार चुने जाएँगे);
- $ldap_queries[$query_id]['userfilter']: यह एक फ़िल्टर है जो प्रत्येक उपयोगकर्ता उम्मीदवार प्रविष्टि पर (उसकी विशेषताओं के आधार पर) एक और चयन जोड़ने के लिए लागू होता है।
UID सदस्यों वाली संयुक्त समूह क्वेरी
आइए अब देखें कि संयुक्त समूह क्वेरी कैसे परिभाषित की जाती है जब समूह सदस्य उपयोगकर्ता UID होते हैं, उपयोगकर्ता DN नहीं।
DN सदस्यों वाली समूह क्वेरी की तरह ही, ये क्वेरी पहली LDAP खोज का उपयोग करती हैं जो LDAP समूह प्रविष्टियाँ खोजती है और उनके सदस्य प्राप्त करती है। इन सदस्य मानों का उपयोग फिर संबंधित प्रविष्टियाँ खोजने के लिए उपयोगकर्ता खोज फ़िल्टर में किया जाता है। इसलिए उपयोगकर्ता की प्रविष्टि में वह विशेषता परिभाषित करने के लिए एक और पैरामीटर कॉन्फ़िगर करना होगा, जो समूहों में मिले सदस्य UID से मेल खानी चाहिए।
आइए आवश्यक पैरामीटर देखें:
- $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['name'] को ऊपर बताए अनुसार परिभाषित करें
फिर समूह फ़िल्टर पैरामीटर परिभाषित करें:
- $ldap_queries[$query_id]['groupbase']: वह रूट DN जहाँ से आप समूह प्रविष्टियों की खोज शुरू करना चाहते हैं;
- $ldap_queries[$query_id]['groupfilter']: वह LDAP फ़िल्टर जो संभावित समूह प्रविष्टियों को चुनेगा;
- $ldap_queries[$query_id]['groupscope']: समूहों के लिए LDAP खोज का दायरा ('one', 'base' या 'sub');
- $ldap_queries[$query_id]['groupmemberattr']: समूह प्रविष्टि में उस LDAP विशेषता का नाम जिसमें उपयोगकर्ता प्रविष्टियों के संदर्भ होंगे;
- $ldap_queries[$query_id]['groupmemberisdn']: FALSE;
- $ldap_queries[$query_id]['useridattr']: उस उपयोगकर्ता विशेषता का नाम जो समूह सदस्यों में मिले UID से मेल खानी चाहिए।
इस बिंदु पर, पहली LDAP खोज को चुने गए समूहों से संबंधित उपयोगकर्ता UID खोजने देने के लिए सब कुछ सेट हो चुका है, और उपयोगकर्ता खोज फ़िल्टर अपने-आप भर जाएगा।
हालाँकि, सदस्य UID से स्वचालित रूप से बने उपयोगकर्ता फ़िल्टर को पूरा करके आप यह सीमित कर सकते हैं कि इनमें से कौन से 'उपयोगकर्ता उम्मीदवार' चुने जाएँगे। यह निश्चित रूप से वैकल्पिक है:
- $ldap_queries[$query_id]['userbase']: उपयोगकर्ता LDAP खोज के लिए बेस DN (केवल इस बेस से मेल खाने वाले उपयोगकर्ता उम्मीदवार चुने जाएँगे);
- $ldap_queries[$query_id]['userscope']: उपयोगकर्ता LDAP खोज का दायरा (केवल userbase+scope से मेल खाने वाले उपयोगकर्ता उम्मीदवार चुने जाएँगे);
- $ldap_queries[$query_id]['userfilter']: यह एक फ़िल्टर है जो प्रत्येक उपयोगकर्ता उम्मीदवार प्रविष्टि पर (उसकी विशेषताओं के आधार पर) एक और चयन जोड़ने के लिए लागू होता है।
Active Directory के बारे में क्या?
Active Directory (AD) Microsoft की एक रजिस्ट्री है, जिसे LDAP प्रोटोकॉल की सहायता से क्वेरी किया जा सकता है।
इसलिए इसकी सामग्री का उपयोग LimeSurvey टोकन क्वेरी के लिए किया जा सकता है, लेकिन इसके लिए यह जानना आवश्यक है कि AD कैसे व्यवस्थित होता है।
- LDAP रूट बेस dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 है
==> उदाहरण के लिए, यदि आपकी कंपनी के पास DNS डोमेन 'my-company.com' है और आपका Windows डोमेन 'employees' है, तो आपका रूट बेस dc=employees,dc=my-company,dc=com होगा
- उपयोगकर्ता और उपयोगकर्ता-समूह cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 के अंतर्गत संग्रहीत होते हैं (कृपया ध्यान दें कि यह ou=users नहीं है);
- Active Directory समूह:
- समूह ऑब्जेक्ट अपनी 'member' विशेषता में सदस्यों का DN रखते हैं;
- समूह सदस्यता प्रत्येक उपयोगकर्ता प्रविष्टि की memberOf विशेषता में भी संग्रहीत होती है। इस विशेषता में उन समूहों के DN होते हैं जिनका उपयोगकर्ता सदस्य है;
- कुछ समूह CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 में होते हैं:
- उदाहरण के लिए: cn=Administrator,CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;
कुछ मामलों में Active Directory को क्वेरी करना इतना आसान नहीं होता, इसलिए Active Directory से कुछ जानकारी प्राप्त करने के लिए यहाँ एक नमूना कॉन्फ़िगरेशन दिया गया है:
//Connection to the active directory Server:
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId]['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "none"; // Most AD LDAP servers will not have encryption set by default
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\user";
$ldap_server[$serverId]['bindpw'] = "userpassword";
//$ldap_server[$serverId]['binddn'] = "CN=user,OU=user_group,DC=xxx,DC=yyy"; this one will not work with active directory, that´s why you need to use "domain\\user"
//Here is a sample query for getting all active users of an active directory:
$query_id=0;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Staff with an enabled account';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
//AD has no "account is enabled" attribute, so the filter excludes accounts that have the "disabled" flag (bit 2) set in userAccountControl
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
//You can also filter on group membership through the memberOf attribute of the user. Here is a sample query for getting all active users that are member of the group "samplegroup" in active directory:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'All members of samplegroup';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(memberOf=CN=samplegroup,OU=Group Global,OU=USER_GROUP,DC=xxx,DC=yyy)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
उपयोगकर्ता क्वेरी का एक और उदाहरण:
$ldap_queries[$query_id]['userfilter'] = '(&(objectCategory=Person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'; // AD doesn't recognise enabled accounts in the normal way, so instead, we check users are not disabled
- ऐसे उपयोगकर्ताओं को छोड़ने के लिए जिनका ईमेल पता नहीं है, अपने उपयोगकर्ता फ़िल्टर में (mail=*) जोड़ने पर विचार करें।
समूह क्वेरी का उदाहरण:
$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass=group)(cn=Domain Admins))'; // AD doesn't use the standard attribute name for groups, so use this example instead.
प्रत्येक Active Directory समूह के लिए स्वचालित रूप से एक क्वेरी बनाना
यदि आप अपने सर्वेक्षण के प्रतिभागियों के समूह किसी एक organizational unit (OU) में रखते हैं, तो आपको प्रत्येक समूह के लिए अलग क्वेरी लिखने की आवश्यकता नहीं है। निम्नलिखित कोड उस OU के सभी समूहों की सूची बनाता है और प्रत्येक समूह के लिए एक क्वेरी बनाता है। क्वेरी में समूह के सभी सक्रिय सदस्य शामिल होते हैं, जिनमें नेस्टेड समूहों के सदस्य भी शामिल हैं।
इस कोड को अपने सर्वर और क्वेरी परिभाषाओं के बाद और //DO NOT CHANGE BELOW HERE पंक्ति से पहले config/ldap.php में जोड़ें। फिर शीर्ष पर दिए गए चारों वेरिएबल सेट करें:
- $groupServerId: उपयोग किए जाने वाले सर्वर का $serverId;
- $groupContainer: उस OU का DN जिसमें समूह हैं। केवल इसी OU में सीधे मौजूद समूहों की सूची बनती है, उप-OU के समूहों की नहीं;
- $groupUserBase: वह रूट DN जिसके अंतर्गत समूह के सदस्यों को खोजा जाता है;
- $groupNameAttr: समूह की वह विशेषता (छोटे अक्षरों में) जिसे GUI में क्वेरी के नाम के रूप में उपयोग किया जाता है, उदाहरण के लिए 'info' ("Active Directory Users and Computers" में "Notes" फ़ील्ड) या 'description'। यदि किसी समूह में इस विशेषता का मान नहीं है, तो उसका cn उपयोग किया जाता है।
$groupServerId = 0;
$groupContainer = 'OU=Survey groups,DC=xxx,DC=yyy';
$groupUserBase = 'DC=xxx,DC=yyy';
$groupNameAttr = 'info';
$srv = $ldap_server[$groupServerId];
$ds = ldap_connect(($srv['encrypt'] == 'ldaps' ? 'ldaps://' : 'ldap://') . $srv['server'] . ':' . $srv['port']);
if ($ds) {
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $srv['protoversion'] == 'ldapv3' ? 3 : 2);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
// Never send the bind password if Start-TLS was requested but failed
$secure = $srv['encrypt'] != 'start-tls' || @ldap_start_tls($ds);
$bound = $secure && (empty($srv['binddn']) ? @ldap_bind($ds) : @ldap_bind($ds, $srv['binddn'], $srv['bindpw']));
$result = $bound ? @ldap_list($ds, $groupContainer, '(objectCategory=group)', array('cn', $groupNameAttr)) : false;
$groups = $result ? ldap_get_entries($ds, $result) : array('count' => 0);
for ($i = 0; $i < $groups['count']; $i++) {
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = $groupServerId;
$ldap_queries[$query_id]['name'] = isset($groups[$i][$groupNameAttr][0]) ? $groups[$i][$groupNameAttr][0] : $groups[$i]['cn'][0];
$ldap_queries[$query_id]['userbase'] = $groupUserBase;
// Enabled users with an email address that are members of the group, directly or through nested groups
$ldap_queries[$query_id]['userfilter'] = '(&(objectCategory=person)(objectClass=user)(mail=*)'
. '(!(userAccountControl:1.2.840.113556.1.4.803:=2))'
. '(memberOf:1.2.840.113556.1.4.1941:=' . ldap_escape($groups[$i]['dn'], '', LDAP_ESCAPE_FILTER) . '))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = '';
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
}
ldap_unbind($ds);
}
ध्यान रखने योग्य बातें:
- यह कोड हर बार डायरेक्टरी से कनेक्ट होता है जब "यहाँ से प्रतिभागी इंपोर्ट करें LDAP" पृष्ठ खोला या सबमिट किया जाता है, इसलिए कॉन्फ़िगरेशन बदले बिना नए समूह दिखाई देते हैं। यदि कनेक्शन या बाइंड विफल हो जाता है, तो पृष्ठ केवल वही क्वेरी दिखाता है जिन्हें आपने मैन्युअल रूप से परिभाषित किया है।
- मैचिंग रूल 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) नेस्टेड समूहों को हल करता है। यह केवल Active Directory में उपलब्ध है, इसलिए यह उदाहरण अन्य LDAP सर्वरों के साथ काम नहीं करता। उनमें प्रत्येक समूह के लिए इसके बजाय संयुक्त समूह क्वेरी का उपयोग करें।
- $groupContainer के उप-OU के समूहों की भी सूची बनाने के लिए, ldap_list को ldap_search से बदलें।
- एक से अधिक OU के समूहों की सूची बनाने के लिए, चारों वेरिएबल के अन्य मानों के साथ कोड को दोहराएँ।
Active Directory LDAP संरचना के बारे में अधिक जानकारी Active Directory Architecture और Active Directory Technical Specification पर देखें।