LDAP sync module , получение имен из AD.
Log analyser for Squid access.log
Brought to you by:
kerrytru
LDAP sync module , получение имен из AD.
Отсутствует отладка, невозможно понять , что происходит.
config.php - заполнен.
Имена и пароли проверены. ldapsearch с консоли работает.
При нажатии на "Get CN from LDAP" всегда моментальный вывод
"Created/updated 0 aliases"
Возможно проще скриптом сформировать файл и просто добавлять его в базу?
Что-то вроде построчно:
username1 ОПИСАНИЕ
username 2ОПИСАНИЕ
Внесены изменения, можно проверять.
Такой вариант построчный тоже есть. Это модуль IP2NAME.
"Файл для обработки. В этом файле должны быть пары IP адрес и имя алиаса с разделителем. По одной паре в строке."
Я про имена, не IP адреса.
Стало быть надо создать тикет на создание модуля и описать как он должен работать.
Включил отладку. Включил
if ($ldapbind) {
echo "LDAP bind successful...
";
Вывод:
LDAP bind successful...
Notice: Undefined variable: username in /var/www/site/html/modules/LDAPClient/module.php on line 83
LDAP bind successful...
Notice: Undefined variable: username in /var/www/site/html/modules/LDAPClient/module.php on line 83
LDAP bind successful...
.....
Notice: Undefined variable: username in /var/www/site/html/modules/LDAPClient/module.php on line 83
LDAP bind successful...
Warning: ldap_search(): Search: Bad search filter in /var/www/site/html/modules/LDAPClient/module.php on line 65
Error in search query: Bad search filter
У меня пользователей много, раскиданы по разным OU.
Стандартный ldapsearch умеет искать по всему дереву.
При попытке установить $ldaptree = "DC=domain";
вывод:
LDAP bind successful...
Warning: ldap_search(): Search: Operations error in /var/www/site/html/modules/LDAPClient/module.php on line 65
Error in search query: Operations error
Действительно непонятно. Я поставил dc=my-domain, dc=com и ищет во всему дереву. А OU, очевидно, дан для примера.
ldap_search (php) ничем не ограничен в плане дерева, кроме самого дерева.
Моя струтура такая
dc=my-domain, dc=com
OU=users
cn=Ivan
OU=users2
cn=Petr
Покажи свою структуру, может на конкретной структуре не работает поиск, тоже попробую. Либо проблема на твоей стороне где-то (авторизация, например. я на тесте-то ищу от Manager).
Так с той же авторизацией ldapsearch работает.
Может от ldapsearch плясать?
Структура древняя, одноуровневый домен:
dc=com
OU=users
cn=Ivan
OU=users2
cn=Petr
...
OU=users40
cn=Denis
В конфиге:
$ldapserver = 'ad1.com';
$ldapuser = 'cn=user,ou=ou1,ou=ou2,dc=com';
$ldappass = 'password';
$ldaptree = "ou=users1,DC=com";
Для первой ошибки.
И
$ldaptree = "DC=com";
для второй.
Пример ldapsearch c консоли, для получения логинов ( не имен!) пользователей в группе:
ldapsearch -LLL -E pr=1000/noprompt -H ldap://ad1.com -b "dc=com" -x -D "ldapuser" -w password "(&(objectClass=person)(memberof=CN=groupname,OU=ou1,ou=ou2,dc=com))" grep "sAMAccountName:" |
grep -v # | cut -d" " -f2 | cut -d"=" -f2 | cut -d"," -f1 | grep .
Вцелом код отрабатывает. Я думаю тут надо гуглить почему в твоем конкретном случае возвращается Operations error. Интернет говорит, надо поставить ещё вот такую опцию в файле module.php модуля LDAPClient:
ldap_set_option($this->ldap_conn, LDAP_OPT_REFERRALS, 0);
Строчка №43. Я там уже добавил одну из опций выбора версии протокола.
Добавь, посмотри, будет ли результат.
В общем то ничего не меняется, $ldaptree = "ou=ou1,DC=com"
строка 42,43
ldap_set_option($this->ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($this->ldap_conn, LDAP_OPT_REFERRALS, 0);
Пробовал
ldap_set_option($this->ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 2);
ldap_set_option($this->ldap_conn, LDAP_OPT_REFERRALS, 0);
Все время: Warning: ldap_search(): Search: Bad search filter in /var/www/proxy.npp/html/modules/LDAPClient/module.php on line 66
Error in search query: Bad search filter
Какой search filter сейчас? по коду не понял.
"(uid=".$loginname.")")
на 65 строке в module.php и есть твой search filter. может у тебя uid нет? покажи схему. ну или поиграйся с этим полем. на openldap и схеме inetorgperson всё работает.
О, есть user. В AD это cn.
$result = ldap_search( $this->ldap_conn,$this->vars['ldaptree'], "(cn=".$loginname.")") or die ("Error in search query: ".ldap_error($this->ldap_conn));
ФИО - Это displayName , его где поставить?
"А user, поставь вместо uid. все в module.php "
Можно подробней?
Ошибся, таки прошелся по вложенным.
поменял cn на идеологически правильное sAMAccountName :
$result = ldap_search( $this->ldap_conn,$this->vars['ldaptree'], "(sAMAccountName=".$loginname.")") or die ("Error in search query: ".ldap_error($this->ldap_conn));
Все uid в файле поменять на user ?
$username=$data[$i]["displayName"][0];
echo "User: ". $data[$i]["displayName"][0] ."
";
Нет вывода :(
Код:
echo "dn is: ". $data[$i]["dn"] ."
";
$username=$data[$i]["displayName"][0];
echo "User: ". $data[$i]["displayName"][0] ."
";
echo "Uid: ". $data[$i]["uid"][0] ."
";
Выводит только dn
Ошибка:
Notice: Undefined index: displayName in /var/www/proxy.npp/html/modules/LDAPClient/module.php on line 74
Notice: Undefined index: displayName in /var/www/proxy.npp/html/modules/LDAPClient/module.php on line 75
User:
Last edit: Yaroslav Savchenko 2021-01-04
значит не так поле называется
ldapsearch ... | grep displayName
поля:
https://notessysadmin.com/main-attributes-active-directory
может displayname в нижнем регистре попробовать. ну и раз все раскомментировал, цикл то оберни.
Вы мне лучше пальцем покажите :)
$username=$data[$i]["displayname"][0];
работает.
Умирает тут:
Notice: Undefined index: uid in /var/www/proxy.npp/html/modules/LDAPClient/module.php on line 76
Uid:
Код:
echo "Uid: ". $data[$i]["uid"][0] ."
";
Last edit: Yaroslav Savchenko 2021-01-04
а что оно умирает? раз всё заработало, закомментируй всё как было. только свои параметры оставь. да и всё