Автор Тема: OpenLdap прокси  (Прочитано 28619 раз)

Ctannis

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
OpenLdap прокси
« : 14 Август 2015, 16:33:14 »
Добрый день.
Помогите решить некоторые вопросы.
Поднят OpenLdap прокси, с него хотелось получать некоторые поля и отфильтрованные данные.
Сам прокси запустить удалось, но остался вопрос фильтрации и отбор полей.
......
map     attribute "displayname" "rusname"
.....
access to
       attrs=entry,displayname,telephoneNumber
       by anonymous read
       by users read
       by * none

Вопросы в следующем.
Как получить только вторую запись из displayname
И как получить только записи с заполненными telephoneNumber

В заранее благодарю за помощь.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #1 : 16 Август 2015, 09:33:36 »
Здравствуйте! Извините, что не сразу ответил.
Как получить только вторую запись из displayname
Вопрос сложный. Видимо, Вы имеете ввиду, что в атрибуте displayName два значения и Вам нужно получить второе из них. Дело в том, что значения атрибутов не упорядочиваются, поэтому говорить о том, какое из них первое, а какое второе проблематично =). Если у значений есть какие-то отличительные признаки, можно попытаться выбрать нужное путём конструирования хитрого ACL, да и то не факт, что получится. Опишите проблему поподробнее.

И как получить только записи с заполненными telephoneNumber
Тут попроще. В Вашем ACL надо добавить фильтр:
access to filter="(telephoneNumber=*)" attrs=entry,dispalyName,telephoneNumber
       by anonymous read
       by users read
       by * none

Егор

Ctannis

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #2 : 17 Август 2015, 10:53:44 »
Здравствуйте! Извините, что не сразу ответил.
Как получить только вторую запись из displayname
Вопрос сложный. Видимо, Вы имеете ввиду, что в атрибуте displayName два значения и Вам нужно получить второе из них. Дело в том, что значения атрибутов не упорядочиваются, поэтому говорить о том, какое из них первое, а какое второе проблематично =). Если у значений есть какие-то отличительные признаки, можно попытаться выбрать нужное путём конструирования хитрого ACL, да и то не факт, что получится. Опишите проблему поподробнее.

И как получить только записи с заполненными telephoneNumber
Тут попроще. В Вашем ACL надо добавить фильтр:
access to filter="(telephoneNumber=*)" attrs=entry,dispalyName,telephoneNumber
       by anonymous read
       by users read
       by * none

Егор


Ничего страшного ответ не поздний, я в выходные предпочитаю отдыхать, что желаю и всем остальным.

Единственный отличительный признак это написание на русском языке.

По поводу фильтра я на самом деле такой уже пробовал, после его внесения в конфиг перестает вообще отображаться дерево.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #3 : 18 Август 2015, 14:45:28 »
Здравствуйте!
Цитировать
Единственный отличительный признак это написание на русском языке.
Тогда простого решения я не вижу =( . Можно вместо slapd-ldap написать какой-нибудь посредник на bash или perl, который будет выполнять запрос в исходный каталог и обработку возвращаемых результатов, и использовать slapd-shell или slapd-perl соответственно. Но это не так просто =) .

Цитировать
По поводу фильтра я на самом деле такой уже пробовал, после его внесения в конфиг перестает вообще отображаться дерево.
Видимо у Вас на том конце AD, он вообще капризно относится к любым ACL, кроме простейших. Я пробовал этот фильтр в прокси с OpenLDAP на OpenLDAP, всё нормально отрабатывает. Есть несколько вариантов дальнейших действий:
  • Если Вы используете данные из прокси в качестве справочника в какой-нибудь программе, попробуйте указать фильтр при настройке запроса из этой программы.
  • Если решитесь на написание посредника, то там можно предусмотреть отбор нужных записей.
  • Наконец, можно сделать финт с двойным проксированием, то есть один раз получить "голые" данные в один OpenLDAP-прокси, а затем применить к ним фильтр с помощью второго OpenLDAP-прокси. Это можно сделать на одном и том же сервере.
Опять же, многое зависит от задачи, которую Вы решаете. Поэтому я обычно прошу описывать задачу подробнее.
Егор

Ctannis

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #4 : 18 Август 2015, 15:40:17 »
На другом конце интереснее чем AD там находится Lotus Domino

Хорошо, я делаю добавление в поле
map     attribute "displayname" "rusname"а можно сделать замещение?

Когда делается добавление, оно становится вторым значением, там как из массива нельзя просто второй элемент взять?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #5 : 18 Август 2015, 21:21:59 »
Хорошо, я делаю добавление в поле
map     attribute "displayname" "rusname"а можно сделать замещение?

Когда делается добавление, оно становится вторым значением, там как из массива нельзя просто второй элемент взять?

Вы имеете ввиду, что добавляете в атрибут displayName второе значение, а можно ли вместо этого заменить уже имеющееся? Разумеется можно: добавление, удаление и замещение значений атрибутов -- стандартные для LDAP операции.

Что касается аналогии с массивом -- тут она неуместна. LDAP -- очень простой протокол, он возвращает значения тех атрибутов, которые Вы запрашиваете, причём все скопом, а Вы уж сами думайте, что с ними делать =) . Простота -- коронка и сильная сторона LDAP.

Кстати, пока писал, подумал про так называемые опции пометки атрибутов -- можно попробовать добавлять опцию lang-ru для пометки русскоязычного имени и затем использовать эту опцию как отличительный признак при поиске. Правда не знаю, дружит ли Lotus Domino с такими опциями.

Егор

Ctannis

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #6 : 19 Август 2015, 12:23:24 »

Вы имеете ввиду, что добавляете в атрибут displayName второе значение, а можно ли вместо этого заменить уже имеющееся? Разумеется можно: добавление, удаление и замещение значений атрибутов -- стандартные для LDAP операции.


Я думаю мне как раз подойдет замещение, как это сделать?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #7 : 19 Август 2015, 19:47:52 »
Я думаю мне как раз подойдет замещение, как это сделать?
Вероятно, с помощью того же редактора, которым Вы добавляете новое значение в атрибут =) . Просто поменяйте уже имеющееся значение на новое.

Можно сделать средствами утилит командной строки OpenLDAP. Сначала создайте LDIF-файл примерно такого содержания:
dn: cn=pupkin,dc=mydomen,dc=ru
changetype: modify
replace: displayName
displayName: Вася Пупкин

И внесите изменение в каталог:
# ldapmodify -H ldap://192.168.1.1 -f /path/to/my-modify-file.ldif
В команде ldapmodify нужно ещё задать параметры подключения к каталогу, смотрите man-страницу.

Можно написать какой-нибудь несложный скрипт на bash, чтобы автоматизировать процесс модификации, или создать ldif-файл сразу для всех записей, которые необходимо модифицировать. Записи друг от друга отделяются пустой строкой.

Егор

Ctannis

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #8 : 24 Август 2015, 15:57:01 »
Это через команды, а как через конфиг?

Сейчас я просто добавляю, а как так же но заменить?
map     attribute "displayname" "rusname"

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #9 : 24 Август 2015, 21:34:12 »
Это через команды, а как через конфиг?

Сейчас я просто добавляю, а как так же но заменить?
map     attribute "displayname" "rusname"
Видимо, Вы думаете, что директива map что-то куда-то добавляет? На самом деле это не так. Она лишь преобразует полученный от удалённого сервера поток данных, в данном случае производит отображение удалённого имени атрибута rusname в локальное имя атрибута displayName. Кстати, до меня только что дошло, что удалённый атрибут именно rusname, спасибо man-странице slapo-rwm. Ведь если удалённый атрибут нестандартный, отображайте его в какой-нибудь незадействованный локальный атрибут, а не в displayName, либо оставьте неотображенным, думаю, он не пропадёт из потока данных.

В любом случае, директивы конфигурации никоим образом не влияют на содержание каталога, с их помощью ничего в каталог не добавляется и не удаляется, только командами, либо через клиент (то есть скрытыми от глаз командами =) ).

Егор

Ctannis

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: OpenLdap прокси
« Ответ #10 : 31 Август 2015, 15:58:50 »
Большое спасибо за мучения со мной, я получил некий опыт.
Мне оказалось проще написать выгрузку и загрузку требуемых данных в нужные мне поля.
Спасибо.