Используя фильтр ниже, есть недостаток он выводит линуксовые группы которые не нужно показывать и название группы берётся не из выше привидённого варианта ldiff для групп.
Делаю для получения пользователей {ldap_rfilter, "(&(objectClass=posixAccount)(!(loginShell=/bin/false)))"},
вывод у неё такой же как в примере выше пользователя test5.
Не совсем понимаю как мне из записи uid=test5,ou=people,ou=operators,dc=company,dc=my выбрать вторую ou=* в той версии модуля которую вы порекомендовали. После этого взять и произвести поиск в '(&(objectClass=gosaDepartment)(ou=%g))' для получения нормального имени.
Submitted by mikekaganski on Fri, 2012-10-19 23:59.
Вы просто неправильно видите задачу. Кстати, на странице EJAB-1480 есть примеры и обсуждения специально для случая получения списка из ou.
Обращаю внимание, что этот конфиг работает только с модифицированной версией модуля!
{mod_shared_roster_ldap, [ {ldap_base, "dc=company,dc=my"}, %Сначала получите список групп. Кто Вам сказал, что это надо делать через пользователей? {ldap_rfilter, "(objectClass=organizationalUnit)"}, %Теперь определите, где в полученных объектах хранятся идентификаторы групп {ldap_groupattr, "ou"}, %Теперь, когда готов список идентификаторов всех групп, опросим каждую группу по отдельности, как на будет называться {ldap_gfilter, "(&(objectClass=organizationalUnit)(ou=%g))"}, %Атрибут, содержащий имя группы {ldap_groupdesc, "description"}, %Пользователями группы будут её подобъекты в иерархии LDAP {ldap_member_selection_mode, group_children}, %Для каждой группы модуль будет искать все подобъекты в качестве пользователей, но мы можем ограничить этот поиск (в данном случае не должно быть "%u") {ldap_ufilter, "(objectClass=person)"}, %Теперь определим, где у объектов-пользователей хранится пользовательская часть jid {ldap_useruid, "uid"}, %Где у пользователя хранится отображаемое имя {ldap_userdesc, "cn"} %Как бы всё :) ]}
Если Вы не хотите, чтобы какие-то конкретные ou попали в список групп, Вы можете либо уточнить ldap_base, либо внести эти конкретные ou в ldap_rfilter:
Спасибо, работает только пришлось добавить одну группу в исключение почему то несколько пользователей дублировались и были вне группы. Может знаете возможно подписать сервис жаббера всем пользователям в ростере?
Решил тут обновиться до версии 16.09. Бага EJAB-1480 закрыта. Хотелось бы узнать сейчас можно воспользоваться родным модулем mod_shared_roster_ldap или надо по прежнему использовать модифицированный модуль?
Сходу с родным не получилось.
Не понимаю почему он склеивает в один запрос два фильтра
ldap_gfilter: "(&(objectClass=organizationalUnit)(ou=%g))" и ldap_ufilter: "(&(objectClass=posixAccount)(!(objectClass=gosaUserTemplate))(!(loginShell=/bin/false)))"
В родной версиеи модуля
В родной версиеи модуля невозможно использовать ou в качестве группы. Есть модификация, в которой это исправлено:https://support.process-one.net/browse/EJAB-1480
Делаю для получения
Делаю для получения пользователей {ldap_rfilter, "(&(objectClass=posixAccount)(!(loginShell=/bin/false)))"},
вывод у неё такой же как в примере выше пользователя test5.
Не совсем понимаю как мне из записи uid=test5,ou=people,ou=operators,dc=company,dc=my выбрать вторую ou=* в той версии модуля которую вы порекомендовали. После этого взять и произвести поиск в '(&(objectClass=gosaDepartment)(ou=%g))' для получения нормального имени.
Вы просто неправильно видите
Вы просто неправильно видите задачу. Кстати, на странице EJAB-1480 есть примеры и обсуждения специально для случая получения списка из ou.
Обращаю внимание, что этот конфиг работает только с модифицированной версией модуля!
{mod_shared_roster_ldap, [
{ldap_base, "dc=company,dc=my"},
%Сначала получите список групп. Кто Вам сказал, что это надо делать через пользователей?
{ldap_rfilter, "(objectClass=organizationalUnit)"},
%Теперь определите, где в полученных объектах хранятся идентификаторы групп
{ldap_groupattr, "ou"},
%Теперь, когда готов список идентификаторов всех групп, опросим каждую группу по отдельности, как на будет называться
{ldap_gfilter, "(&(objectClass=organizationalUnit)(ou=%g))"},
%Атрибут, содержащий имя группы
{ldap_groupdesc, "description"},
%Пользователями группы будут её подобъекты в иерархии LDAP
{ldap_member_selection_mode, group_children},
%Для каждой группы модуль будет искать все подобъекты в качестве пользователей, но мы можем ограничить этот поиск (в данном случае не должно быть "%u")
{ldap_ufilter, "(objectClass=person)"},
%Теперь определим, где у объектов-пользователей хранится пользовательская часть jid
{ldap_useruid, "uid"},
%Где у пользователя хранится отображаемое имя
{ldap_userdesc, "cn"}
%Как бы всё :)
]}
Если Вы не хотите, чтобы какие-то конкретные ou попали в список групп, Вы можете либо уточнить ldap_base, либо внести эти конкретные ou в ldap_rfilter:
{ldap_rfilter, "(&(objectClass=organizationalUnit)(!(ou=operators)))"},
Спасибо, работает только
Спасибо, работает только пришлось добавить одну группу в исключение почему то несколько пользователей дублировались и были вне группы. Может знаете возможно подписать сервис жаббера всем пользователям в ростере?
bng wrote: Может знаете
Может знаете возможно подписать сервис жаббера всем пользователям в ростере?
Не понял вопрос.
Решил тут обновиться до
Решил тут обновиться до версии 16.09. Бага EJAB-1480 закрыта. Хотелось бы узнать сейчас можно воспользоваться родным модулем mod_shared_roster_ldap или надо по прежнему использовать модифицированный модуль?
Сходу с родным не получилось.
В новом модуле фильтры
В новом модуле фильтры ldap_gfilter и ldap_ufilter объединяет в запросе к ldap(увидел запрос в логе ldap)
Старый модуль не получается собрать :(
Получил список
Получил список групп:
2017-12-22 14:07:15.322 [debug] <0.391.0>@eldap:recvd_packet:849 {searchResEntry,{'SearchResultEntry',<<"ou=groups,ou=operators,dc=company,dc=my">>,[{'PartialAttributeList_SEQOF',<<"ou">>,[<<"groups">>]}]}}
Как я понимаю получаем список пользователей и название групп:
2017-12-22 14:07:15.611 [debug] <0.391.0>@eldap:send_command:789 {searchRequest,{'SearchRequest',<<"operators">>,baseObject,neverDerefAliases,0,5,false,{and,[{and,[{equalityMatch,{'AttributeValueAssertion',<<"objectClass">>,<<"organizationalUnit">>}},{equalityMatch,{'AttributeValueAssertion',<<"ou">>,<<"%g">>}}]},{and,[{equalityMatch,{'AttributeValueAssertion',<<"objectClass">>,<<"posixAccount">>}},{not,{equalityMatch,{'AttributeValueAssertion',<<"loginShell">>,<<"/bin/false">>}}}]}]},[<<"description">>]}}
Не понимаю почему он склеивает в один запрос два фильтра
ldap_gfilter: "(&(objectClass=organizationalUnit)(ou=%g))" и ldap_ufilter: "(&(objectClass=posixAccount)(!(objectClass=gosaUserTemplate))(!(loginShell=/bin/false)))"
Так как фильтр не правильный получают такой ответ
2017-12-22 14:07:15.614 [debug] <0.391.0>@eldap:recvd_packet:849 {searchResDone,{'LDAPResult',invalidDNSyntax,<<>>,<<"invalid DN">>,asn1_NOVALUE}}
Модуль собрал от сюдаhttps://github.com/sharewax/ejabberd/blob/4013629e5deecf3336b6ae97bf7698...