LDAP-поиск

Discussion in 'PHP' started by Kuzya, 6 Apr 2009.

  1. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Здравствуйте. Не совсем хорошо (а точнее почти никак) разбираюсь в работе с ActiveDirectory через PHP. Суть моей задачи в том что бы при выходе авторизовать пользователя и в сессию положить его имя, id и группы в которые он входит. Используя LDAP я смог нормально подключится и проверить существования пользователя (функцией ldap_bind). А когда стало нужно извлечь данные о пользователе то я запоролся. Вот используемый код :
    (Имя пользователя "one", пароль "123abc!", имя машины "dipl", имя домена "diplom.local")

    PHP:
    $ldap_addr "192.168.244.5";
    $g_res ldap_connect($ldap_addr);
    if(
    $g_res)
    {
        print 
    "Connected to ladp-server<br />";
    } else {
        print 
    "can`t connect to addr {$ldap_addr}";
        exit;
    }

    $bind_user ldap_bind($g_res"one@diplom.local""123abc!");
    if (
    $bind_user)
    {
        print 
    "User binded!<br />";
    } else {
        print 
    "can`t bind user!<br />";
        exit;
    }

    $sr=ldap_search($g_res,"dc=dipl,dc=diplom,dc=local""(samaccountname=one)", array("*") );
    $info ldap_get_entries($g_res$sr);
    var_dump($info);
    Всё хорошо работает до вызова ldap_search. Проблема в строке "dc=dipl,dc=diplom,dc=local". Если честно то я даже не знаю что туда писать. Нашёл расшифровки для всего того что можно в ней указать (o,cn,dc и т.д.) но не знаю что в эти параметры поместить и какие из них обязательны. Я знаю имя машины и домена, их и пишу. Но при любом случае функция выдаёт ошибку:
    "Warning: ldap_search() [function.ldap-search]: Search: No such object in ... on line ..."
    Помогите пожалуйста, третий день мучаюсь. Буду благодарен за любые подсказки!
    P.S. в редакторе запросов AD нужный мне запрос выглядит вот так: "(&(objectCategory=person)(objectClass=user)(name=one))"
     
  2. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    при настройке LDAP я сталкивался с access-list. В которых прописывается доступ к полям! Так вот если неправильно этим пользоваться, то вполне вероятно получить такой результат! Советую капать в этом направлении!
     
  3. Dronga

    Dronga ВАША реклама ТУТ!!

    Joined:
    1 Jul 2005
    Messages:
    575
    Likes Received:
    239
    Reputations:
    249
    Это AD, если биндится и пользователя находит, значит дело не в "access-list". Советую поставить Softerra LDAP Browser, подключиться к AD с теми реквизитами которые ты использщуешь в PHP и произвосети поиск из неё. Она покажет шаблон поиска, который можно скопировать и использовать в функции... Там же и поля поглядишь и со структурой получше познакомишься. Сам долго поначалу тыкался когда парочку служб интегрировал..
     
    1 person likes this.
  4. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    demond, спасибо за отзыв. Я в гугле видел подобную проблему. Там всё решилось через разрешение доступа хоста. У меня немного другое. Действительно проблема была в запросе.
    Dronga! Спасибо огромное! Всё скачал, разобрался. Запрос
    (web_admin - Это группа к которой принадлежит пользователь)
    выдал всё что мне нужно! Наконец-то я всё решил =))) Спасибо! сейчас просто методом подбора найду что требуется =)
    P.S. а почему я выбрал +10 репутации Дронги, а прибавилось всего 3? =О
     
    #4 Kuzya, 6 Apr 2009
    Last edited: 6 Apr 2009
  5. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Dronga, а где мне в древе нужно порыться что бы узнать группу пользователя по его логину? Покопался сейчас, но могу только найти имя и фамилию (в списке членов определённой группы), а вот логин никак =(
     
    #5 Kuzya, 6 Apr 2009
    Last edited: 6 Apr 2009
  6. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Извиняюсь, туплю =)
     
  7. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Всё, сделал окончательно. Вдруг кому пригодится. Вот запрос:
    $sr=ldap_search($g_res,"CN=Users,DC=diplom,DC=local", "samaccountname=one", array("*") );
    показываем все данные по пользователю указанного домена (diplom.local) =)
     
  8. Fault

    Fault New Member

    Joined:
    24 Apr 2009
    Messages:
    1
    Likes Received:
    1
    Reputations:
    0
    Народ. Нужна ваша помощь. Я новичек в этом деле. Дело обстоит так. Вот код
    PHP:
    <?php
    $ldaphost 
    "ldap://vihor.vihor.local";
    $ldapconn ldap_connect($ldaphost);

    if(
    $ldapconn)
    {
    echo(
    "Подключение установлено!<br>");
    echo(
    "$ldapconn<br>");
    }
    else
    {
    echo(
    "Неа, не получается...<br>");
    }

    $ldaprdn1 "uid=panin_d,ou=users,ou=vt,dc=vt,dc=local";
    $ldaprdn2 "ou=users,ou=vt,dc=vt,dc=local";
    $ldaprdn3 "panin_d@vt.local";
    $ldaprdn4 "ou=vt,dc=vt,dc=local";
    $ldappass "123";

    $ldapbind ldap_bind($ldapconn$ldaprdn1$ldappass);
    if (
    $ldapbind) { echo "Привязка прошла успешно! $ldaprdn1"; } else { echo "Не удается привязаться к каталогу... $ldaprdn1"; }

    $ldapbind ldap_bind($ldapconn$ldaprdn2$ldappass);
    if (
    $ldapbind) { echo "Привязка прошла успешно! $ldaprdn2"; } else { echo "Не удается привязаться к каталогу...$ldaprdn2"; }

    $ldapbind ldap_bind($ldapconn$ldaprdn3$ldappass);
    if (
    $ldapbind) { echo "Привязка прошла успешно! $ldaprdn3"; } else { echo "Не удается привязаться к каталогу...$ldaprdn3"; }

    $ldapbind ldap_bind($ldapconn$ldaprdn4$ldappass);
    if (
    $ldapbind) { echo "Привязка прошла успешно! $ldaprdn4"; } else { echo "Не удается привязаться к каталогу...$ldaprdn4"; }

    ldap_close($ldapconn);

    ?>
    Я не могу привязаться к папке. Ошибка такая: Unable to bind to server: Protocol error in... прошу помощи.

    http://s57.radikal.ru/i158/0904/15/40342e9d1ccc.jpg вот ссылка скришота ldap-каталога.
     
    #8 Fault, 24 Apr 2009
    Last edited by a moderator: 12 May 2009
    1 person likes this.
  9. Dronga

    Dronga ВАША реклама ТУТ!!

    Joined:
    1 Jul 2005
    Messages:
    575
    Likes Received:
    239
    Reputations:
    249
    1. Попробуй заменить имя контроллера на его IP.
    2. Скорее всего проблема связана с неправильной установкой соединения. Смотри с версиями протокола какие есть завязки. И смотри специфичные для твоего LDAP-сервера примочки.

    Какой LDAP-сервер используется?
     
    #9 Dronga, 12 May 2009
    Last edited: 12 May 2009
    1 person likes this.