Доброго времени суток, Господа!
Нужна небольшая помощь в настройке ejabberd, а точнее mod_shared_roster_ldap
Есть следующий набор софта:
OS CentOS 5.2
ejabberd 2.1.5 собранный из сырцов
mod_shared_roster_ldap 0.5.3 собранный вместе с ejabberd
CommuniGate Pro 5.2 умеющий через LDAP отдавать почтовые параметры аккаунтов
Задача привязать ejabberd к LDAP в CGP
Собственно большая часть задачи уже сделана, пользователи авторизуются, поиск по базе акков ведется. Но при попытках сформировать общий ростер через mod_shared_roster_ldap ростер не формируется.
Если я правильно понял документацию при указанных ниже параметрах должно быть сделано следующее:
Первый запрос к LDAP запрашивает всех пользователей с атрибутом objectclass=CommuniGateAccount с выводом атрибута ou
А дальше должна идти серия запросов, где uid=* ou=%g objectclass=CommuniGateAccount.
Но по факту, как видно из лога делается два идентичных запроса к LDAP - objectclass=CommuniGateAccount вывод ou.
К сожалению ни гугл ни документация мне не помогли, может быть кто-то сталкивался с похожей ситуацией и смог ее решить. Буду благодарен за любые подсказки.
Конфиг mod_shared_roster_ldap (сделан по примеру Flat GIT)
Параметры LDAP берутся из блока авторизаци
{auth_method, ldap}.
{ldap_servers, ["mail.example.com"]}.
{ldap_uids, [{"uid"}]}.
{ldap_base, "cn=example.com,o=Company"}.
{ldap_rootdn, "test@example.com"}.
{ldap_password, "xxxxxx"}.
{mod_shared_roster_ldap,[
{ldap_rfilter, "(objectclass=CommuniGateAccount)"},
{ldap_groupattr, "ou"},
{ldap_memberattr, "uid"},
{ldap_filter, "(objectclass=CommuniGateAccount)"},
{ldap_userdesc, "cn"}
]},
Типовой аккаунт пользователя в LDAP:
[root@host ~]# ldapsearch -W -x -D
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: uid=test
# requesting: ALL
#
# test, example.com, o=Company
dn: uid=test,cn=example.com,o=Company"
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: CommuniGateAccount #По сути параметр отделяющий людей от служебных записей
cn: Test Testov #Полное имя пользователя
externalINBOX: NO
hostServer: mail.example.com
ou: Test Group #Группа пользователя в XMPP
sn: Test
uid: test
userPassword:: XXXXXXX
mail:
Все логи приведены при подключении к северу пользователя user1
Лог CGP LDAP возникающий при каждом подключении нового пользователя к ejabberd при включенном mod_shared_roster_ldap
06:13:43.986 4 LDAP-001696([ejabberdIP]) searching(sub) 'cn=example.com,o=Company'
06:13:43.986 4 LDAP-001696([ejabberdIP]) searching where (objectclass=CommuniGateAccount)
06:13:43.986 4 LDAP-001696([ejabberdIP]) searching for (ou objectclass )
06:13:43.994 4 LDAP-001696([ejabberdIP]) 'uid=user1,cn=example.com,o=Company' retrieved
06:13:43.994 5 LDAP-001696([ejabberdIP]) out: XXX
06:13:43.994 4 LDAP-001696([ejabberdIP]) 'uid=user2,cn=example.com,o=Company' retrieved
06:13:43.994 5 LDAP-001696([ejabberdIP]) out: XXX
06:13:43.994 4 LDAP-001696([ejabberdIP]) 'uid=user3,cn=example.com,o=Company' retrieved
06:13:43.994 5 LDAP-001696([ejabberdIP]) out: XXX
06:13:43.998 2 LDAP-001696([ejabberdIP]) search finished
06:13:44.052 4 LDAP-001696([ejabberdIP]) searching(sub) 'cn=example.com,o=Company'
06:13:44.052 4 LDAP-001696([ejabberdIP]) searching where (objectclass=CommuniGateAccount)
06:13:44.052 4 LDAP-001696([ejabberdIP]) searching for (ou objectclass )
06:13:44.060 4 LDAP-001696([ejabberdIP]) 'uid=user1,cn=example.com,o=Company' retrieved
06:13:44.060 5 LDAP-001696([ejabberdIP]) out: XXX
06:13:44.060 4 LDAP-001696([ejabberdIP]) 'uid=user2,cn=example.com,o=Company' retrieved
06:13:44.060 5 LDAP-001696([ejabberdIP]) out: XXX
06:13:44.060 4 LDAP-001696([ejabberdIP]) 'uid=user3,cn=example.com,o=Company' retrieved
06:13:44.060 5 LDAP-001696([ejabberdIP]) out: XXX
06:13:44.103 4 LDAP-001694([ejabberdIP]) searching(sub) 'cn=example.com,o=Company'
06:13:44.104 4 LDAP-001694([ejabberdIP]) searching where (uid=user1)
06:13:44.104 4 LDAP-001694([ejabberdIP]) searching for (uid objectclass )
06:13:44.104 4 LDAP-001694([ejabberdIP]) 'uid=user1,cn=example.com,o=Company' retrieved
06:13:44.104 5 LDAP-001694([ejabberdIP]) out: XXX
06:13:44.104 2 LDAP-001694([ejabberdIP]) search finished
Лог debug ejabberd:
=INFO REPORT==== 2010-10-16 15:05:38 ===
D(<0.333.0>:eldap:675) : {searchRequest,
{'SearchRequest',"cn=example.com,o=Company",
wholeSubtree,neverDerefAliases,0,0,false,
{equalityMatch,
{'AttributeValueAssertion',"objectclass",
"CommuniGateAccount"}},
["ou"]}}
=INFO REPORT==== 2010-10-16 15:05:38 ===
D(<0.333.0>:eldap:746) : {searchResEntry,
{'SearchResultEntry',
"uid=user1,cn=example.com,o=Company",
[{'PartialAttributeList_SEQOF',"ou",
["Test Group"]},
{'PartialAttributeList_SEQOF',"mail",
["user1@example.com"]}]}}
... и т.д. все пользователи
=INFO REPORT==== 2010-10-16 15:05:38 ===
D(<0.333.0>:eldap:675) : {searchRequest,
{'SearchRequest',"cn=example.com,o=Company",
wholeSubtree,neverDerefAliases,0,0,false,
{equalityMatch,
{'AttributeValueAssertion',"objectclass",
"CommuniGateAccount"}},
["ou"]}}
=INFO REPORT==== 2010-10-16 15:05:38 ===
D(<0.333.0>:eldap:746) : {searchResEntry,
{'SearchResultEntry',
"uid=user1,cn=example.com,o=Company",
[{'PartialAttributeList_SEQOF',"ou",
["Test Group"]},
{'PartialAttributeList_SEQOF',"mail",
["user1@example.com"]}]}}
и т.д. все пользователи
=INFO REPORT==== 2010-10-16 15:05:38 ===
D(<0.291.0>:eldap:675) : {searchRequest,
{'SearchRequest',"cn=example.com,o=Company",
wholeSubtree,neverDerefAliases,0,0,false,
{equalityMatch,
{'AttributeValueAssertion',"uid","user1"}},
["uid"]}}
=INFO REPORT==== 2010-10-16 15:05:38 ===
D(<0.291.0>:eldap:746) : {searchResEntry,
{'SearchResultEntry',
"uid=user1,cn=example.com,o=Company",
[{'PartialAttributeList_SEQOF',"uid",
["user1"]},
{'PartialAttributeList_SEQOF',"mail",
["user1@example.com"]}]}}