Проблема LDAP, недопустимый синтаксис dn привязки ldap

Я знаю, что моя ошибка будет что-то очень простое, но я пытался найти проблему, и я не вижу ее, может быть, вы можете мне помочь....

Я пытаюсь создать функцию с php, поэтому я могу подключиться к LDAP и найти нужную информацию.

мой php-код следующий:

$ldapconfig['host'] = "127.0.0.1";
$ldapconfig['port'] = NULL;
$ldapconfig['basedn'] = "dc=example,dc=com";
$ldapconfig['binddn'] = "user";
$ldapconfig['bindpw'] = "password";


function ldap_authenticate($user, $pass) {
global $ldapconfig;
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); 
if ($user != "" && $pass != "") {
    $ds=ldap_connect($ldapconfig['host'],$ldapconfig['port']);
    if(!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
        return NULL;
    }
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    ldap_bind( $ds, $ldapconfig['binddn'], $ldapconfig['bindpw']);
    $r = ldap_search( $ds, $ldapconfig['basedn'], 'sAMAccountName=' . $user);
    if ($r) {
        $result = ldap_get_entries( $ds, $r);
        if ($result[0]) {
            if (ldap_bind( $ds, $result[0]['dn'], $pass) ) {
                return $result[0]['mail'][0];
            }
        }
    }
}
return NULL;

когда я пытаюсь запустить код, это дает мне следующую ошибку: ldap_bind недопустимый синтаксис DN в строке xxxx и эта линия - следующий:

ldap_bind( $ds, $ldapconfig['binddn'], $ldapconfig['bindpw']);

2 ответов


Как указано в ошибке, ваш bind DN является неправильным форматом. DN представляют полный путь к объекту - так что в вашем случае должно быть что-то вроде этого (похоже, вы на AD?)

"cn=имя пользователя, ou=пользователи домена, dc=пример, dc=com"

в зависимости от вашего вкуса LDAP (Active Directory, OpenLDAP и т. д.), Вы может иметь возможность использовать uid (так что просто "имя пользователя") для привязки, но лучше всего предположить, что вам всегда нужен полный DN.

вы можете использовать средство LDAP как Apache Directory Studio чтобы помочь построить запросы и узнать, какие DN объекта. Или есть ldp.exe тоже (при условии, что это объявление), но directory studio проще в использовании.


на DC, выполнение: пользователь dsquery-samid jim

покажет DN пользователя, соответствующего sAMAccountName: "СN=Джим Willeke,CN=пользователи,DC=сумасшедший,ДЦ=willeke в,dc=com"и

http://ldapwiki.willeke.com/wiki/LDAP%20and%20Active%20Directory