Menu ▾ ▴

#129 LDAP sync module , получение имен из AD.

2.0
closed
Andrey
None
2021-06-24
2020-12-30
No

LDAP sync module , получение имен из AD.
Отсутствует отладка, невозможно понять , что происходит.

config.php - заполнен.
Имена и пароли проверены. ldapsearch с консоли работает.

При нажатии на "Get CN from LDAP" всегда моментальный вывод
"Created/updated 0 aliases"

Возможно проще скриптом сформировать файл и просто добавлять его в базу?
Что-то вроде построчно:

username1 ОПИСАНИЕ
username 2ОПИСАНИЕ

Discussion

1 2 3 > >> (Page 1 of 3)
  • Andrey

    Andrey - 2020-12-30

    Внесены изменения, можно проверять.

    Такой вариант построчный тоже есть. Это модуль IP2NAME.

     
  • Yaroslav Savchenko

    "Файл для обработки. В этом файле должны быть пары IP адрес и имя алиаса с разделителем. По одной паре в строке."

    Я про имена, не IP адреса.

     
    • Andrey

      Andrey - 2020-12-31

      Стало быть надо создать тикет на создание модуля и описать как он должен работать.

       
  • Yaroslav Savchenko

    Включил отладку. Включил
    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

     
  • Yaroslav Savchenko

    • Непонятно, почему только одному OU в конфиге?
      У меня пользователей много, раскиданы по разным 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

     
    • Andrey

      Andrey - 2020-12-31

      Действительно непонятно. Я поставил dc=my-domain, dc=com и ищет во всему дереву. А OU, очевидно, дан для примера.

      ldap_search (php) ничем не ограничен в плане дерева, кроме самого дерева.

      Моя струтура такая
      dc=my-domain, dc=com
      OU=users
      cn=Ivan
      OU=users2
      cn=Petr

      Покажи свою структуру, может на конкретной структуре не работает поиск, тоже попробую. Либо проблема на твоей стороне где-то (авторизация, например. я на тесте-то ищу от Manager).

       
  • Yaroslav Savchenko

    Так с той же авторизацией 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 .

     
  • Andrey

    Andrey - 2020-12-31

    Вцелом код отрабатывает. Я думаю тут надо гуглить почему в твоем конкретном случае возвращается Operations error. Интернет говорит, надо поставить ещё вот такую опцию в файле module.php модуля LDAPClient:

    ldap_set_option($this->ldap_conn, LDAP_OPT_REFERRALS, 0);

    Строчка №43. Я там уже добавил одну из опций выбора версии протокола.

    Добавь, посмотри, будет ли результат.

     
  • Yaroslav Savchenko

    В общем то ничего не меняется, $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 сейчас? по коду не понял.

     
  • Andrey

    Andrey - 2021-01-04

    "(uid=".$loginname.")")
    на 65 строке в module.php и есть твой search filter. может у тебя uid нет? покажи схему. ну или поиграйся с этим полем. на openldap и схеме inetorgperson всё работает.

     
  • Yaroslav Savchenko

    О, есть 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 , его где поставить?

     
    • Andrey

      Andrey - 2021-01-04
        $username=$data[$i]["cn"][0];
      
        вот тут вместо cn, напиши свое поле. displayname. А user, поставь вместо uid. все в module.php
      
       
      • Yaroslav Savchenko

        "А user, поставь вместо uid. все в module.php "
        Можно подробней?

         
  • Yaroslav Savchenko

    • похоже надо ключ, чтобы по всем OU искать, поиск прошел только по указанному OU, вложенные OU не обработал.
     
    • Yaroslav Savchenko

      Ошибся, таки прошелся по вложенным.

       
  • Yaroslav Savchenko

    поменял cn на идеологически правильное sAMAccountName :
    $result = ldap_search( $this->ldap_conn,$this->vars['ldaptree'], "(sAMAccountName=".$loginname.")") or die ("Error in search query: ".ldap_error($this->ldap_conn));

     
  • Yaroslav Savchenko

    Все uid в файле поменять на user ?

     
  • Yaroslav Savchenko

    $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
    • Andrey

      Andrey - 2021-01-04

      значит не так поле называется

       
    • Andrey

      Andrey - 2021-01-04

      может displayname в нижнем регистре попробовать. ну и раз все раскомментировал, цикл то оберни.

       
      • Yaroslav Savchenko

        Вы мне лучше пальцем покажите :)

         
      • Yaroslav Savchenko

        $username=$data[$i]["displayname"][0];
        работает.

         
  • Yaroslav Savchenko

    Умирает тут:
    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
    • Andrey

      Andrey - 2021-01-04

      а что оно умирает? раз всё заработало, закомментируй всё как было. только свои параметры оставь. да и всё

       
1 2 3 > >> (Page 1 of 3)

Log in to post a comment.