mod_shared_roster_ldap группы в ou

Здравствуйте. Подскажите пожалуйста как можно получать группу из ou=* и уже после этого делать второй запрос для получения названия группы.

Так выглядит ldiff пользователя
ldapsearch -x -b 'dc=сompany,dc=my' '(&(objectClass=person)(uid=test5))'

dn: uid=test5,ou=people,ou=operators,dc=company,dc=my
sn: Testov5
givenName: Test5
uid: test5
homePhone: 3143
preferredLanguage: ru_RU
cn: Test5 Testov5
homeDirectory: /home/test5
loginShell: /bin/bash
uidNumber: 1097
gidNumber: 1001
gecos: Test5 Testov5
shadowLastChange: 14949
mail: test5@company.ru
telephoneNumber: 3143
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: gosaAccount
objectClass: posixAccount
objectClass: shadowAccount
objectClass: gosaMailAccount
objectClass: gosaProxyAccount
objectClass: goFonAccount

ldiff группы operators '(&(objectClass=gosaDepartment)(ou=operators))'

dn: ou=operators,dc=company,dc=my
ou: operators
objectClass: organizationalUnit
objectClass: top
objectClass: gosaDepartment
description:: 0JrQu9C40LXQvdGC0YHQutCw0Y8g0YHQu9GD0LbQsdCwLiDQntC/0LXRgNCw0YLQvtGA0Ys=

Используя фильтр ниже, есть недостаток он выводит линуксовые группы которые не нужно показывать и название группы берётся не из выше привидённого варианта ldiff для групп.

{mod_shared_roster_ldap, [
   {ldap_base, "dc=company,dc=my"},
   {ldap_rfilter, "(objectClass=posixGroup)"},
   {ldap_gfilter, "(&(objectClass=posixGroup)(cn=*)(!(objectClass=gosaMailAccount)))"},
   {ldap_filter, ""},
   {ldap_ufilter, "(&(objectClass=person)(uid=%u))"},
   {ldap_memberattr, "memberUid"},
   {ldap_groupattr, "cn"},
   {ldap_groupdesc, "cn"},
   {ldap_userdesc, "cn"}

Если нужно могу выложить часть лога c запросом в ldap из ejabberd.
Версия ejabberd 2.1.10-3 i386 (wheezy/sid)

В родной версиеи модуля

В родной версиеи модуля невозможно использовать 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: Может знаете

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...

Syndicate content