PHP

2011-05-18 10 views
6

के साथ एक एलडीएपी सर्वर बनाना मैं PHP में एक वेब आधारित एप्लिकेशन बनाना चाहता हूं जो एलडीएपी अनुरोध प्राप्त करता है और एलडीएपी प्रतिक्रिया वापस भेजता है, लेकिन वास्तव में एलडीएपी सर्वर का उपयोग नहीं करता है। विशेष रूप से मैं संपर्क तालिका को एक MySQL डेटाबेस में थंडरबर्ड में एक एलडीएपी एड्रेस बुक के रूप में उपलब्ध करना चाहता हूं।PHP

दो सवाल:

  1. वहाँ पीएचपी साथ एक LDAP सर्वर को लागू करने के लिए एक मौजूदा पुस्तकालय है? (PHP_LDAP पैकेज एक एलडीएपी क्लाइंट बनाने के लिए है, जहां PHP एप्लिकेशन मौजूदा एलडीएपी सर्वर से कनेक्ट होता है।)

  2. एलडीएपी डेटा वास्तव में क्लाइंट से मेरी स्क्रिप्ट में कैसे मिलता है? क्या एलडीएपी HTTP पर यात्रा करता है?

    $HTTP_RAW_POST_DATA 
    

या इसी तरह की: जहां अनुरोध में प्रकट होंगे? क्या अपाचे एलडीएपी अनुरोधों को संभाल सकता है और उन्हें मेरी स्क्रिप्ट में पास कर सकता है या यह एक पूरी तरह से अलग प्रोटोकॉल है जिसके लिए एक अलग "श्रोता" अनुप्रयोग को संभालने की आवश्यकता होती है?

+2

ओपनएलडीएपी को [बैकएंड के रूप में SQL डेटाबेस का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है] (http://www.openldap.org/doc/admin24/backends.html) सीधे। यह मूल ओपनएलएपी बीडीबी के रूप में पूरी तरह से विशेष रूप से प्रदर्शित नहीं है, लेकिन PHP की एक पंक्ति के बिना आपकी आवश्यकताओं को पूरा कर सकता है। (जो एक लंबे एलडीएपी सर्वर के लिए कार्यान्वयन भाषा का पहला विकल्प नहीं होगा, लंबे शॉट से नहीं। :) – sarnold

+0

मैंने बैक-एसक्यूएल थोड़ी देर पहले काम करने की कोशिश की थी लेकिन आखिर में छोड़ दिया क्योंकि मैं इसे भी नहीं मिला ठीक से संकलित करने के लिए। असल में हमारे पास PHP/MySQL पर आधारित एक सीआरएम है, और किसी भी तरह से हमें संपर्क पुस्तिका के रूप में संपर्क थंडरबर्ड में उपलब्ध कराने की आवश्यकता है। मुझे लगता है कि हम एक असली एलडीएपी सर्वर का उपयोग कर सकते हैं और हमारे सीआरएम (क्लाइंट के रूप में) एलडीएपी डेटाबेस अपडेट कर सकते हैं, लेकिन यह वास्तव में अक्षम है। मुझे आश्चर्य है कि थंडरबर्ड के लिए JSON पता पुस्तिका प्लग-इन बनाना आसान हो सकता है, और एलडीएपी को पूरी तरह से छोड़ सकता है? – Nick

उत्तर

3

एलडीएपी प्रोटोकॉल को अपाचे द्वारा मूल रूप से संभाला नहीं जाता है, और मैंने उस प्रोटोकॉल को संभालने वाले अपाचे मॉड्यूल को नहीं देखा है। मुझे विश्वास नहीं है कि आप अपाचे के माध्यम से PHP का उपयोग करके इसे करने में सक्षम होंगे। आप एक शुद्ध PHP सर्वर को लागू करने में सक्षम हो सकते हैं (http://php.net/manual/en/function.stream-socket-server.php देखें) और उसके बाद PHP में एलडीएपी प्रोटोकॉल पैकेट पार्सर को भी लागू करें। मुझे विश्वास नहीं है कि PHP के लिए मूल एएसएन 1 पार्सर है, लेकिन आप सी में से एक को ढूंढ सकते हैं और किसी भी तरह इसे एकीकृत कर सकते हैं।

+0

यह दुर्भाग्यपूर्ण है। ऐसा लगता है कि PHP में एलडीएपी सर्वर को लागू करने के लायक होने की तुलना में यह अधिक काम करेगा। मैं जेएसओएन या एक्सएमएल अनुरोधों के माध्यम से http (एस) के माध्यम से पता डेटा प्राप्त करने के लिए थंडरबर्ड को संशोधित करने की संभावना को देखने जा रहा हूं। – Nick

+0

आह: यदि आप यही खोज रहे हैं तो शायद gContactsSync (http://gcontactsync.mozdev.org/) से कुछ शुरू करने के लिए आपको आधार मिलेगा। – Femi

+1

आह: मुझे इसे खोजने के लिए हमेशा के लिए ले गया, लेकिन आप पेनरोस (http://penrose.redhat.com/display/PENROSE/Home) देखें, जो जावा में है लेकिन (सिद्धांत रूप में) आपको ldap को वापस जाने देता है किसी भी स्टोरेज स्ट्रक्चर के साथ (इसलिए आप अपने एड्रेस बुक बैकएंड में एडाप्टर लिखते हैं और पेनरोस एलडीएपी के माध्यम से इसे उजागर करता है), – Femi

0

कुछ समय पहले मैंने वास्तव में एक स्मार्ट देव के साथ काम किया था, जिसमें कहा गया था कि उसने PHP में एक काम कर रहे एलडीएपी क्लाइंट/सर्वर को लागू किया था। उन्होंने इसे यहां एमआईटी लाइसेंस के तहत प्रकाशित किया: https://code.google.com/p/ldap-php/

मुझे नहीं पता कि इसकी स्थिति क्या है।

0

यह इस पुस्तकालय के साथ एक शुद्ध पीएचपी LDAP सर्वर बनाने के लिए संभव है (मैं इसे शुरू में लिखा एलडीएपी ग्राहक प्रयोजनों के लिए):

https://github.com/FreeDSx/LDAP

यह एक अनुरोध हैंडलर (सिर्फ एक अंतरफलक) के आधार पर काम करता है ग्राहक अनुरोध के लिए। असल में आप एक कक्षा का विस्तार करते हैं जो क्लाइंट अनुरोधों को संभालेगा और प्रतिक्रिया वापस भेज देगा (वैसे भी एक खोज के मामले में)।एक बुनियादी उदाहरण:

namespace Foo; 

use FreeDSx\Ldap\Server\RequestHandler\GenericRequestHandler; 

class LdapRequestHandler extends GenericRequestHandler 
{ 
    /** 
    * @var array 
    */ 
    protected $users = [ 
     'user' => '12345', 
    ]; 

    /** 
    * Validates the username/password of a simple bind request 
    * 
    * @param string $username 
    * @param string $password 
    * @return bool 
    */ 
    public function bind(string $username, string $password): bool 
    { 
     return isset($this->users[$username]) && $this->users[$username] === $password; 
    } 

    /** 
    * Override the search request. This must send back an entries object. 
    * 
    * @param RequestContext $context 
    * @param SearchRequest $search 
    * @return Entries 
    */ 
    public function search(RequestContext $context, SearchRequest $search): Entries 
    { 
     // Do your logic here with the search request, return entries... 
     return new Entries(
      Entry::create('cn=Foo,dc=FreeDSx,dc=local', [ 
       'cn' => 'Foo', 
       'sn' => 'Bar', 
       'givenName' => 'Foo', 
      ]), 
      Entry::create('cn=Chad,dc=FreeDSx,dc=local', [ 
       'cn' => 'Chad', 
       'sn' => 'Sikorra', 
       'givenName' => 'Chad', 
      ]) 
     ); 
    } 
} 
  1. अनुरोध हैंडलर का उपयोग करना, एक LDAP सर्वर बनाएँ:

    1. पुस्तकालय में सामान्य अनुरोध हैंडलर का विस्तार एक अनुरोध हैंडलर बनाएं प्रक्रिया है कि ग्राहकों के लिए पोर्ट 389 पर सुनती है:
    use FreeDSx\Ldap\LdapServer; 
    use Foo\LdapRequestHandler; 
    
    $server = new LdapServer([ 'request_handler' => LdapRequestHandler::class ]); 
    $server->run(); 
    

    सर्वर कंप्यूटर अनुप्रयोग के बारे में अधिक डॉक्स रहे हैं पुस्तकालय की onent से यहाँ:

    https://github.com/FreeDSx/LDAP/tree/master/docs/Server

    यह करने के लिए कुछ चेतावनियां:

      वर्तमान में
    • सर्वर
    • वर्तमान में वापस अनुरोध हैंडलर से नियंत्रण वापस जाने के लिए कोई रास्ता नहीं है के लिए कोई पेजिंग/VLV समर्थन ग्राहक के लिए।