Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   LDAP-поиск (https://forum.antichat.xyz/showthread.php?t=114687)

Kuzya 06.04.2009 09:10

LDAP-поиск
 
Здравствуйте. Не совсем хорошо (а точнее почти никак) разбираюсь в работе с 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))"

demond 06.04.2009 09:47

при настройке LDAP я сталкивался с access-list. В которых прописывается доступ к полям! Так вот если неправильно этим пользоваться, то вполне вероятно получить такой результат! Советую капать в этом направлении!

Dronga 06.04.2009 12:26

Это AD, если биндится и пользователя находит, значит дело не в "access-list". Советую поставить Softerra LDAP Browser, подключиться к AD с теми реквизитами которые ты использщуешь в PHP и произвосети поиск из неё. Она покажет шаблон поиска, который можно скопировать и использовать в функции... Там же и поля поглядишь и со структурой получше познакомишься. Сам долго поначалу тыкался когда парочку служб интегрировал..

Kuzya 06.04.2009 18:32

demond, спасибо за отзыв. Я в гугле видел подобную проблему. Там всё решилось через разрешение доступа хоста. У меня немного другое. Действительно проблема была в запросе.
Dronga! Спасибо огромное! Всё скачал, разобрался. Запрос
Цитата:

$sr=ldap_search($g_res,"CN=web_admin,CN=Builtin,DC =diplom,DC=local", "(objectClass=*)", array("*") );
(web_admin - Это группа к которой принадлежит пользователь)
выдал всё что мне нужно! Наконец-то я всё решил =))) Спасибо! сейчас просто методом подбора найду что требуется =)
P.S. а почему я выбрал +10 репутации Дронги, а прибавилось всего 3? =О

Kuzya 06.04.2009 18:51

Dronga, а где мне в древе нужно порыться что бы узнать группу пользователя по его логину? Покопался сейчас, но могу только найти имя и фамилию (в списке членов определённой группы), а вот логин никак =(

Kuzya 07.04.2009 10:46

Извиняюсь, туплю =)

Kuzya 07.04.2009 16:41

Всё, сделал окончательно. Вдруг кому пригодится. Вот запрос:
$sr=ldap_search($g_res,"CN=Users,DC=diplom,DC=loca l", "samaccountname=one", array("*") );
показываем все данные по пользователю указанного домена (diplom.local) =)

Fault 24.04.2009 20:14

Народ. Нужна ваша помощь. Я новичек в этом деле. Дело обстоит так. Вот код
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-каталога.

Dronga 12.05.2009 01:05

1. Попробуй заменить имя контроллера на его IP.
2. Скорее всего проблема связана с неправильной установкой соединения. Смотри с версиями протокола какие есть завязки. И смотри специфичные для твоего LDAP-сервера примочки.

Какой LDAP-сервер используется?


Время: 20:25