За последние 24 часа нас посетили 18715 программистов и 1603 робота. Сейчас ищут 894 программиста ...

не проходит бинд к Apple Open Directory

Тема в разделе "PHP для новичков", создана пользователем pnp2000, 2 фев 2012.

  1. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    вот часть кода которая отвечает за бинд к серваку , но не биндится , уже много чего попробывал с вариациями пароль/параметры $ldapUser , может я что-то не так делаю
    Код (Text):
    1.  
    2. error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    3.     $ldapHost = "ldap://10.0.0.1";
    4.         $ldapPort = "389";
    5.     $ldapUser ="cn=admin$,cn=computers,dc=server,dc=domen,dc=subdomen,dc=ru";
    6.     $ldapPswd ="password";
    7.  
    8. $ldapLink =ldap_connect($ldapHost, $ldapPort)
    9.     or die("Can't establish LDAP connection");
    10.  
    11. if (ldap_set_option($ldapLink,LDAP_OPT_PROTOCOL_VERSION,3))
    12. {
    13.     echo "Using LDAP v3";
    14. }else{
    15.     echo "Failed to set version to protocol 3";
    16. }
    17.  
    18. ldap_bind($ldapLink,$ldapUser,$ldapPswd);
    Код (Text):
    1. Using LDAP v3
    2. Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Invalid credentials in /Library/WebServer/Documents/test.php on line 39
    3.  
    4. Notice: Undefined variable: errors in /Library/WebServer/Documents/test.php on line 41
    5.  
    6. Warning: ldap_error() expects parameter 1 to be resource, null given in /Library/WebServer/Documents/test.php on line 41
    7.  
    8. Notice: Undefined variable: errors in /Library/WebServer/Documents/test.php on line 42
    пробывал разные варинаты с пользователем и паролем , анонимный бинд тоже не проходит
     
  2. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Может все таки uid=$admin или cn=$admin ?
     
  3. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    ну про UID я нигде не видел , а имя пользователя почему то надо писать с $ на конце , чтобы писали в начале невидел , собственно без $ тоже не работает :(
     
  4. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    вобщем анонимный бинд прошёл , теперь буду дальше мучатся :)
    вот код который заработал
    Код (PHP):
    1.     $ldapHost = "x.x.x.x";
    2.         $ldapPort = "389";
    3.         
    4. $ldapLink =ldap_connect ($ldapHost, $ldapPort)
    5.     or die("Can't establish LDAP connection");
    6.  
    7. if (ldap_set_option ($ldapLink,LDAP_OPT_PROTOCOL_VERSION,3))
    8. {
    9.     echo "Using LDAP v3";
    10. }else{
    11.     echo "Failed to set version to protocol 3";
    12. }
    13. $Bind = ldap_bind ($ldapLink);
    14. echo "<br>$Bind"; 
     
  5. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    Вобщем всё вышло , может кому пригодится

    Код (Text):
    1.  
    2. // Модуль авторизации LDAP для Apple Open Directory
    3. // ************************************************ //
    4.  // для устранения вывода ошибки в случае неправильного пароля или логина
    5. error_reporting(E_ERROR);
    6. // генерация запроса Basic авторизации
    7. if (!isset($_SERVER['PHP_AUTH_USER'])) {
    8.     header('WWW-Authenticate: Basic realm="my Realm"');
    9.     header('HTTP/1.0 401 Unauthorized');
    10.     // если нажали "Отмена" то выходим с ошибкой "401 Unauthorized"
    11.     die("<html><head><title>Not found</title></head><body>401 Unauthorized</body></html>");
    12. } else {
    13.     //для коректного вывода в браузер , принудительно включаем UTF8
    14.     echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
    15. }
    16.     // для удобства присваеваем суперглобальным переменным простые имена
    17.     $user = $_SERVER['PHP_AUTH_USER'];
    18.     $RDN_Pass = $_SERVER['PHP_AUTH_PW'];
    19.     // IP адрес LDAP сервера
    20.     $ldapHost = "x.x.x.x";
    21.     // Порт LDAP сервера
    22.     $ldapPort = "389";      
    23.     // Предварительный DN для поиска в базе данных LDAP
    24.     // "cn" - это путь к в базе где лежит список пользователей
    25.     // "dc" - это имя сервера с доменами и субдоменами
    26.     $DN = "cn=users,dc=имя сервера, dc=субдомен, dc=домен, dc=ru";
    27.     // имя пользователя которого мы будем искать в базе данных LDAP
    28.     $filter = "uid=$user";
    29.    
    30. // соеденение с LDAP сервером       
    31. $ldapLink =ldap_connect ($ldapHost, $ldapPort)
    32.     or die("Can't establish LDAP connection");
    33. // устнановка протоколоа LDAPv3
    34. ldap_set_option ($ldapLink,LDAP_OPT_PROTOCOL_VERSION,3)
    35.     or die("Failed to set LDAP protocol to version 3");
    36. // проверка корректной работы LDAP
    37. $Bind = ldap_bind ($ldapLink)
    38.     or die ("Anonymus LDAP bind error");
    39. // Поиск пользователя в базе данных LDAP
    40. // Нужно если у пользовтаеля есть альтернативные короткие имена
    41. $sr = ldap_search($ldapLink, $DN,"$filter")
    42.     or die("LDAP search Error");
    43. $entries = ldap_get_entries($ldapLink, $sr)
    44.     or die("Get entries error");
    45. // создание корректной строки DN для ldap_bind
    46. $RDN = $entries[0]['dn'];
    47. // Проверка имени пользователя и пароля
    48. if ($ldapLink) {
    49.     // привязка к ldap-серверу с пользовательской парой login/pass
    50.     $ldapbind = ldap_bind($ldapLink, $RDN, $RDN_Pass);
    51.     // проверка результата привязки
    52.     if ($ldapbind) {
    53.         return 1;
    54.     } else {
    55.         die ("Unknown login or password");
    56.     }
    57. }
     
  6. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Таки uid =)
    Ну отлично, сам разобрался -)