За последние 24 часа нас посетили 15587 программистов и 1550 роботов. Сейчас ищут 872 программиста ...

LDAP, проблемы при поиске на нескольких доменах

Тема в разделе "Прочие вопросы по PHP", создана пользователем DjDance, 6 авг 2008.

  1. DjDance

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

    С нами с:
    6 авг 2008
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте господа, нигде не нашел решение этой проблемы - пишу сюда.
    Заранее прошу извинить, я не админ, а программер, с админством сталкиваюсь "постольку-поскольку", поэтому если некоторые фразы будут смешными - не ругайтесь. :)

    Итак, проблема.

    Есть контроллер доменов (пусть будет IP 1.1.1.1 для примера).
    На нем 4 домена: (для примера) DOM1 - dom1.com; DOM2 - dom2.com, ... и т.д.

    DOM1 - главный домен, к нему и происходит обращение через LDAP.
    Юзер под которым логинюсь - админ для этого домена.
    Итак, задача довольно простая - проверка логина пользователя, и сбор данных о пользователе. Загвоздка - пользователи с разных доменов.

    Итак, как вся эта фигня работает:
    1. Логинюсь как админ (прописано в конфиге) на DOM1 для того, чтобы получить все права на сбор инфы в системе.
    2. Проверяю существует ли юзер с логином и паролем на домене, который пользователь выбрал.
    3. Собираю данные о пользователе.
    4. В зависимости от принадлежности юзера к группам, раздаю ему права на фронт-енд.
    5. Перенаправляю куда надо, в зависимости от прав доступа.

    Проблема в пункте 3. Если пользователь вводит данные с домена DOM1 - все работает ништяк, данные собираются и т.д. А вот если пользователь вводит данные с DOM2, то аутентификация пользователя через ldap_bind проходит как и полагается (на любом домене), а вот сбор данных через ldap_search выдает пустой массив.

    Почему я не могу собрать данные о пользователе на другом домене? Проверить его могу, а данные получить не могу?

    Вот пример кода, как это работает: (конечно пароли и т.д. нереальные, просто для примера)

    PHP:
    1.  
    2. //этот массив меняется в зависимости от домена, выбранного пользователем
    3. $options = array('account_suffix' => [email='@dom2.com]'@dom2.com[/email]', '_base_dn' => 'DC=dom2,DC=com', 'domain_controllers' => array("1.1.1.1"), 'ad_username' => 'user', 'ad_password' => 'pass');
    4.  
    5. $ldap=new adLDAP($options);
    6. $ldap->user_domain = 'DOM2'; // тоже конечно динамичная переменная
    7.  
    8. //ну тут конечно всякие проверки на пустые пароли и кучу прочей байды, это мало интересно
    9. //ldap_connect тоже конечно есть, все это работает, ничего интересно нету чтобы писать очевидные вещи
    10. //проверка пользователя, которая работает на любом домене
    11. $ldap->_bind = @ldap_bind($ldap->_conn, $ldap->user_domain . '\\' . $ldap->ad_username, $ldap->ad_password)
    12.  
    13. $filter="samaccountname=".$ldap->ad_username;
    14. $fields=array("samaccountname","mail","memberof","department","displayname","telephonenumber","primarygroupid","firstname","lastname");
    15.  
    16. //а вот здесь она нифига не ищет, если не главный домен DOM1, а любой другой DOM2 и т.д.
    17. $sr=ldap_search($ldap->_conn, $ldap->_base_dn, $filter, $fields);
    18. $entries = ldap_get_entries($ldap->_conn, $sr);
    19.  
    Ну вот вроде все что мог сказать по поводу данной проблемы. Вроде все сделал правильно, и base_dn и т.д. И все работает на одном домене, а вот как заставить работать на других доменах - не получается. :(

    Помогите, кто может. Буду очень благодарен.
     
  2. DjDance

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

    С нами с:
    6 авг 2008
    Сообщения:
    2
    Симпатии:
    0
    Никто не сталкивался с такой проблемой??? :(
    Я видел вроде раньше 440Hz отвечал на вопросы по ldap, интересно он видел это сообщение или нет?