2012-10-25 27 views
7

मुझे OpenLDAP 2.4.32 और PHP 5.4.6 के साथ ldap_modify का उपयोग करके अपर्याप्त एक्सेस त्रुटियां मिल रही हैं।PHP ldap_modify अपर्याप्त पहुंच

php समारोह है कि त्रुटियों दे रहा है इस तरह दिखता है:

function set_user($dn, $password, $data) 
{ 
    /* This function sets the users infomation */ 

    // Get Configuration Items 
    $ldapServer = $this->config->item('ldapServer'); 
    $ldapDCRoot = $this->config->item('ldapDCRoot'); 


    // Connect to LDAP 
    $ldapConnection = ldap_connect($ldapServer); 

    if($ldapConnection) 
    { 
    $r = ldap_bind($ldapConnection, $dn, $password); 
    if ($r) 
    { 
     // Bind completed successfully 
     $r = ldap_modify($ldapConnection, $dn, $data); 
     return True; 
    } 
    die("Unsuccessful Bind"); 
    } 
    die("Can't connect to LDAP"); 
} 

$ dn उपयोगकर्ता अपना पासवर्ड के साथ-साथ अपनी जानकारी को बदल करने की कोशिश कर से भरा डीएन है। और $ डेटा वह मान है जो वे अपडेट कर रहे हैं, अभी डेटा में $ डेटा ['मोबाइल'] = "newPhoneNumber" बदलने के लिए फ़ोन नंबर शामिल है। यह सब इस तथ्य को छोड़कर काम कर रहा है कि डेटा वास्तव में कभी लिखा नहीं गया है।

ओपनडैप फ़ाइल नीचे शामिल है जैसा कि आप देख सकते हैं कि एसीएल कहता है कि मुझे इसे लिखने में सक्षम होना चाहिए।

include  /etc/openldap/schema/corba.schema 
include  /etc/openldap/schema/core.schema 
include  /etc/openldap/schema/cosine.schema 
include  /etc/openldap/schema/duaconf.schema 
include  /etc/openldap/schema/dyngroup.schema 
include  /etc/openldap/schema/inetorgperson.schema 
include  /etc/openldap/schema/java.schema 
include  /etc/openldap/schema/misc.schema 
include  /etc/openldap/schema/nis.schema 
include  /etc/openldap/schema/openldap.schema 
include  /etc/openldap/schema/ppolicy.schema 
include  /etc/openldap/schema/collective.schema 

allow bind_v2 

pidfile  /var/run/openldap/slapd.pid 
argsfile /var/run/openldap/slapd.args 

TLSCertificateFile /etc/pki/tls/certs/slapd.pem 
TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem 

access to * 
    by self write 
    by users read 
    by anonymous auth 


database bdb 
suffix  "dc=example,dc=com" 
checkpoint 1024 15 
rootdn  "cn=manager,dc=example,dc=com" 
rootpw   REDACTED 

directory /var/lib/ldap 

index objectClass      eq,pres 
index ou,cn,mail,surname,givenname  eq,pres,sub 
index uidNumber,gidNumber,loginShell eq,pres 
index uid,memberUid      eq,pres,sub 
index nisMapName,nisMapEntry   eq,pres,sub 

प्रश्न यह है कि PHP मूल्य को अपडेट क्यों नहीं कर सकता है और इसके बजाय अपर्याप्त पहुंच त्रुटि हो रही है?

+0

से पहले अपनी कॉल (ldap_connect के लिए), 'ldap_set_option (शून्य, LDAP_OPT_DEBUG_LEVEL, 7) की कोशिश,' जो अपाचे वैश्विक त्रुटि लॉग को डिबग आउटपुट का एक समूह डंप हो जाएगा (यह _will not_ को डंप एक vhost-विशिष्ट लॉग, या अपनी 'error_log' सेटिंग में।) – miken32

उत्तर

2

अपनी समस्या को डीबग करने के लिए, मैं वही अनुरोध करने के लिए कमांड लाइन टूल ldapmodify का उपयोग करने का सुझाव दूंगा। आपको इसे अपने सिस्टम में स्थापित करने की आवश्यकता हो सकती है (रेडहाट openldap-clients, डेबियन slapd)।

LDAP Utilities

डिबगिंग स्तर -d आप उम्मीद है कि क्या php पुस्तकालय प्रदान कर रहा है यही कारण है कि अपने कॉल अपर्याप्त पहुँच त्रुटि लौट रहा है के बारे में अधिक से अधिक जानकारी प्राप्त कर सकते स्थापना करके।

जब मैं ldapmodify के साथ ऐसा करने के लिए किया था कभी नहीं किया है, मैं बड़ी सफलता के साथ ldapsearch के साथ इस्तेमाल किया है। तो इसका उपयोग करने के तरीके को जानने के लिए कुछ खोज या ldapmodify --help ले सकते हैं।

मैं कल्पना आदेश कुछ इस तरह दिखेगा:

ldapmodify -d 7 -h ldap.server.com -D bind_dn -w bind_password -f /tmp/entrymods 
0

मैं कुछ चीजें हैं, जबकि सक्रिय निर्देशिका पासवर्ड बदलने के साथ संघर्ष किया। शायद यह दूसरों की भी मदद करेगा:

पहला: आपको एक सुरक्षित कनेक्शन की आवश्यकता होगी अन्यथा एलडीएपी पासवर्ड बदलने से इनकार कर देगा।

$this->ldap_ds = ldap_connect($this->hostname); 
//some protocol options 
ldap_set_option($this->ldap_ds, LDAP_OPT_REFERRALS, 0); 
ldap_set_option($this->ldap_ds, LDAP_OPT_PROTOCOL_VERSION, 3); 

// start secure connection on port 636 
ldap_start_tls($this->ldap_ds); 

2: सक्रिय निर्देशिका हम unicodePwd इस्तेमाल किया के लिए: अपने सिस्टम पर मैं समस्याओं सुरक्षित कनेक्शन शुरू करने, मैं अब /etc/ldap/ldap.conf

# TLS_CACERT /etc/ssl/certs/ca-certificates.crt 
TLS_REQCERT never 

3 संपादित करने के लिए इस हल किया था userPassword फ़ील्ड के बजाय फ़ील्ड। इस क्षेत्र में यूनिकोड में एक स्ट्रिंग की आवश्यकता है।

$entry["unicodePwd"] = iconv("UTF-8", "UTF-16LE", '"' . $newPassword . '"'); 

4: पासवर्ड बदलने के लिए आप modify उपयोग नहीं कर सकते बजाय आप mod_replace समारोह का उपयोग करना चाहिए।

ldap_mod_replace($ldapConnection, $user_dn, $entry);