вот часть кода которая отвечает за бинд к серваку , но не биндится , уже много чего попробывал с вариациями пароль/параметры $ldapUser , может я что-то не так делаю Код (Text): error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); $ldapHost = "ldap://10.0.0.1"; $ldapPort = "389"; $ldapUser ="cn=admin$,cn=computers,dc=server,dc=domen,dc=subdomen,dc=ru"; $ldapPswd ="password"; $ldapLink =ldap_connect($ldapHost, $ldapPort) or die("Can't establish LDAP connection"); if (ldap_set_option($ldapLink,LDAP_OPT_PROTOCOL_VERSION,3)) { echo "Using LDAP v3"; }else{ echo "Failed to set version to protocol 3"; } ldap_bind($ldapLink,$ldapUser,$ldapPswd); Код (Text): Using LDAP v3 Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Invalid credentials in /Library/WebServer/Documents/test.php on line 39 Notice: Undefined variable: errors in /Library/WebServer/Documents/test.php on line 41 Warning: ldap_error() expects parameter 1 to be resource, null given in /Library/WebServer/Documents/test.php on line 41 Notice: Undefined variable: errors in /Library/WebServer/Documents/test.php on line 42 пробывал разные варинаты с пользователем и паролем , анонимный бинд тоже не проходит
ну про UID я нигде не видел , а имя пользователя почему то надо писать с $ на конце , чтобы писали в начале невидел , собственно без $ тоже не работает
вобщем анонимный бинд прошёл , теперь буду дальше мучатся вот код который заработал Код (PHP): $ldapHost = "x.x.x.x"; $ldapPort = "389"; $ldapLink =ldap_connect ($ldapHost, $ldapPort) or die("Can't establish LDAP connection"); if (ldap_set_option ($ldapLink,LDAP_OPT_PROTOCOL_VERSION,3)) { echo "Using LDAP v3"; }else{ echo "Failed to set version to protocol 3"; } $Bind = ldap_bind ($ldapLink); echo "<br>$Bind";
Вобщем всё вышло , может кому пригодится Код (Text): // Модуль авторизации LDAP для Apple Open Directory // ************************************************ // // для устранения вывода ошибки в случае неправильного пароля или логина error_reporting(E_ERROR); // генерация запроса Basic авторизации if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="my Realm"'); header('HTTP/1.0 401 Unauthorized'); // если нажали "Отмена" то выходим с ошибкой "401 Unauthorized" die("<html><head><title>Not found</title></head><body>401 Unauthorized</body></html>"); } else { //для коректного вывода в браузер , принудительно включаем UTF8 echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'; } // для удобства присваеваем суперглобальным переменным простые имена $user = $_SERVER['PHP_AUTH_USER']; $RDN_Pass = $_SERVER['PHP_AUTH_PW']; // IP адрес LDAP сервера $ldapHost = "x.x.x.x"; // Порт LDAP сервера $ldapPort = "389"; // Предварительный DN для поиска в базе данных LDAP // "cn" - это путь к в базе где лежит список пользователей // "dc" - это имя сервера с доменами и субдоменами $DN = "cn=users,dc=имя сервера, dc=субдомен, dc=домен, dc=ru"; // имя пользователя которого мы будем искать в базе данных LDAP $filter = "uid=$user"; // соеденение с LDAP сервером $ldapLink =ldap_connect ($ldapHost, $ldapPort) or die("Can't establish LDAP connection"); // устнановка протоколоа LDAPv3 ldap_set_option ($ldapLink,LDAP_OPT_PROTOCOL_VERSION,3) or die("Failed to set LDAP protocol to version 3"); // проверка корректной работы LDAP $Bind = ldap_bind ($ldapLink) or die ("Anonymus LDAP bind error"); // Поиск пользователя в базе данных LDAP // Нужно если у пользовтаеля есть альтернативные короткие имена $sr = ldap_search($ldapLink, $DN,"$filter") or die("LDAP search Error"); $entries = ldap_get_entries($ldapLink, $sr) or die("Get entries error"); // создание корректной строки DN для ldap_bind $RDN = $entries[0]['dn']; // Проверка имени пользователя и пароля if ($ldapLink) { // привязка к ldap-серверу с пользовательской парой login/pass $ldapbind = ldap_bind($ldapLink, $RDN, $RDN_Pass); // проверка результата привязки if ($ldapbind) { return 1; } else { die ("Unknown login or password"); } }