LINUX.ORG.RU
решено ФорумAdmin

Ejabberd с LDAP-бекендом: показ аватарок.

 ,


0

2

Здравствуйте.

Настроено так:

{mod_vcard_ldap, [
    %% соответствие между полями Vcard и результатом поиска в LDAP
    {ldap_vcard_map, [
        {"NICKNAME", "%u", []},
        {"FAMILY", "%s", ["sn"]},
        {"GIVEN", "%s", ["givenName"]},
        {"MIDDLE", "%s", ["initials"]},
        {"FN", "%s %s %s", ["sn", "givenName", "initials"]},
        {"EMAIL", "%s", ["mail"]},
        {"ORGUNIT", "%s", ["ou"]},
        {"PHOTO", "%s", ["jpegPhoto"]},
        {"LOCALITY", "%s", ["l"]},
        {"TEL", "%s", ["telephoneNumber"]}
    ]},
    %% предлагаем искать только по этим полям
    {ldap_search_fields, [
        {"Пользователь", "%u"},
        {"Фамилия", "sn"},
        {"Имя", "givenName"},
        {"Отчество", "initials"},
        {"Почта", "mail"},
        {"Отдел", "ou"},
        {"Телефон", "telephoneNumber"}
    ]},
    %% показываем только эти результаты
    {ldap_search_reported, [
        {"Полное имя", "FN"},
        {"Пользователь", "NICKNAME"}
    ]}
  ]}

Аватары соответствуют стандартам по размерам и прочим характеристикам (http://www.xmpp.org/extensions/xep-0153.html#bizrules-image), хранятся в соответствующем поле jpegPhoto.

Ростер отдаётся автоматически, при подключении. Соответственно, все поля в нём заполняются автоматически и корректно (ник, статус и тд), за исключением аватары. Вот пример того, что получаю от сервера, когда подключаюсь:

<<<< user1@domain/Vacuum-IM 10:40:31 +3 <<<<
  <presence from="user2@domain/123" to="user1@domain/Vacuum-IM">
    <priority>30</priority>
    <status>tralala</status>
    <x xmlns="jabber:x:avatar">
      <hash>35b6967ad4cf11b2a2b65c16017c0a0128063c22</hash>
    </x>
    <c xmlns="http://jabber.org/protocol/caps" node="http://vacuum-im.googlecode.com" ver="nvOfScxvX/KRll5e2pqmMEBIls0=" hash="sha-1"/>
    <x xmlns="vcard-temp:x:update">
      <photo/>
    </x>
    <delay xmlns="urn:xmpp:delay" from="user2@domain/123" stamp="2014-06-05T06:22:56Z"/>
    <x xmlns="jabber:x:delay" stamp="20140605T06:22:56"/>
  </presence>

Аватара не отображается. При этом, внутри vCard, если я его открою, показывается корректно. Если же я ткну «обновить Vcard», то аватар стягивается и показывается в ростере до следующего перезапуска клиента или истечения какого-то таймаута:

>>>> user1@domain/Vacuum-IM 10:51:30 +11343 >>>>
  <iq type="get" to="user2@domain" id="sid_40">
    <vCard xmlns="vcard-temp"/>
  </iq>

<<<< user1@domain/Vacuum-IM 10:51:30 +16 <<<<
  <iq from="user2@domain" type="result" to="user1@domain/Vacuum-IM" id="sid_40">
    <vCard xmlns="vcard-temp">
      <NICKNAME>user2</NICKNAME>
      <FN>Иванов Иван Иванович</FN>
      <EMAIL>
        <INTERNET/>
        <PREF/>
        <USERID>mail@mail.mail</USERID>
      </EMAIL>
      <PHOTO>
        <TYPE>image/jpeg</TYPE>
        <BINVAL>/9j/4AAQSkZJRg…==</BINVAL>
      </PHOTO>
      <TEL>
        <VOICE/>
        <WORK/>
        <NUMBER>123</NUMBER>
      </TEL>
      <N>
        <FAMILY>Иванов</FAMILY>
        <GIVEN>Иван</GIVEN>
        <MIDDLE>Иванович</MIDDLE>
      </N>
      <ORG>
        <ORGUNIT>Подразделение</ORGUNIT>
      </ORG>
      <ADR>
        <LOCALITY>city</LOCALITY>
      </ADR>
    </vCard>
  </iq>

Сталкивался ли кто-то с такой проблемой и как заборол?


Разными клиентами пробовал? Может в клиенте проблема?

black_13
()

Попробуй различные клиенты jabber.

DALDON ★★★★★
()

Была такая проблема, но там то ли в ejabberd, то ли в ерланге был сломан LDAP. В каком-то из апдейтов починилось, сейчас работает.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Понял.

Подскажи, пожалуйста, какая версия erlang и ejabberd у тебя крутится сейчас?

У меня dev-lang/erlang-15.2.3.1 и net-im/ejabberd-2.1.9999-r4

HolyBoy
() автор топика
Последнее исправление: HolyBoy (всего исправлений: 1)

Стесняюсь спросить, а Вы пользуете LDAP? Или AD подобный LDAP? :) Очень интересен вопрос, как вы аватары кладёте в LDAP. - Интересует для samba4

DALDON ★★★★★
()
Ответ на: комментарий от no-dashi

Ясно, спасибо. Похоже, это исправление в самом дистрибутиве было.

HolyBoy
() автор топика
Ответ на: комментарий от DALDON

Я выше дал ссылку на стандарт, которому должна удовлетворять картинка. Используется openldap. Для него же есть в документации описание того, как хранить блобы. Если очень кратко, то base64.

HolyBoy
() автор топика
Ответ на: комментарий от HolyBoy

Спасибо! Так-как нужен SSO, мы пока остановились на samba4, как на комплексном решении, (LDAP+kerberos+AD). Сейчас используем OpenFire в сборке от 2006 года, всё это хозяйство хочется перевести на shared roster LDAP+ejabberd (в идеале с kerberos + pidgin), ну и аватар картинки было бы не плохо туда положить. Так, что буду весьма рад, если расскажете чем дело закончилось у Вас.

DALDON ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.