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

Имя пользователя xmpp, отображаемое в списке контактов (из ldap)

 , ,


0

1

Здравствуйте, уважаемые.

Ставлю сервер openfire, внутренная БД, подключаю к openldap.

В ldap'е есть группа cn=xmpp, и memberOf'ами идут члены группы.

Пользователь группы выглядит так:

dn: uid=user,ou=People,dc=domen,dc=ru
cn: user
description:: 0YLQstC+0YDRh9C10YHRgtCy0L4=
gidnumber: 11000
givenname:: 0JPRgNC40LPQvtGA0LjQuQ==
homedirectory: /home/user
mail: mail@yandex.ru
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: posixAccount
sn:: 0JTQsNC90LjQu9C+0LI=
uid: user

При этом givenName - это имя на русском (условно, Иван), а sN - это фамилия (Иванов)

При установке сервера на этапе User Mapping выбираю Username Field - uid, Search fields - uid и User Filter - (&(uid={0})(memberOf=cn=xmpp,ou=Group,dc=domen,dc=ru))

В User Profiles (vCard) указываю Name - {givenName} {sN} и Email - {mail}

На следующем этапе выбираю Group Filter - (cn=xmpp)

При таких настройках, пользователь видит, что он зашел под своим именем и фамилией, а не под uid'ом. А вот других пользователей в списке контактов, он видит под uid'ами. Т.е. себя он видит как Ивана Иванова, а остальных как user1, user2 и т.д.

Где можно поменять параметр имени отображаемого в списке контактов пользователя, чтобы в списке контактов отображался Петр Петров и т.д.?

можно глянуть openfire.xml и заодно скрин system properties? скорее всего он замаппил не на uid, а на cn, это стандартное поведение

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

В конфиге Openfire.xml (удаленны комменты) нет ничего похожего:

cat  openfire.xml
<?xml version="1.0" encoding="UTF-8"?>
<jive>
  <adminConsole>
        <port>9090</port>
    <securePort>9091</securePort>
  </adminConsole>
  <locale>en</locale>
  
      <stream>
    <management>
      <active>true</active>
            <requestFrequency>5</requestFrequency>
    </management>
  </stream>
  <connectionProvider>
    <className>org.jivesoftware.database.EmbeddedConnectionProvider</className>
  </connectionProvider>
  <setup>true</setup>
</jive>

В system propeties Значение uid и cn осталось в полях:

ldap.groupNameField	cn
ldap.searchFields	uid
ldap.usernameField	uid
ldap.searchFilter	(&(uid={0})(memberOf=cn=xmpp,ou=Group,dc=domen,dc=ru))

Сменила оба поля параметра на c uid на givenName (и ldap.searchFields, и ldap.usernameField).

Перезагрузила openfire, захожу в админку. В Users/Groups - Groups выбираю свою группу xmpp (которая из ldap'а подгрузилась) - там пользователи теперь не по uid'ам, а по именам (анна@xmpp.domen.ru).

Вроде всё правильно, но авторизоваться в программе xmpp не получается. И uid, и aнна, и анна@xmpp.domen.ru пробовала. Пароль ввожу правильный.

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

по поводу ldap.searchFields и ldap.usernameField - да, там должен быть uid, это юзернейм и я не уверен что попенфаер корректно отработает не-юникодное имя (ну и что клиент его отработает, и т.п.)

попробуй добавить в vCard

<FN>{givenName} {sN}</FN>
<NICKNAME>{givenName} {sN}</NICKNAME>
upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

Добавила

<FN>{givenName} {sN}</FN>
Uid'ы вернула на место. Авторизуется клиент, пользователи всё равно uid'ами остались.

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

Упс, с чего-то решила, что это у меня уже есть. Нет...

Добавила nickname, перезагрузила openfire, перелогинилась в клиенте. Контакты остались uid'ами.

manik207
() автор топика

ок... помимо перезагрузки можешь еще попробовать добавить новый контакт в ростер? в идеале конечно грохнуть бы весь shared-list и перешарить. просто мало ли где оно может кешировать данные vCard.

если не взлетит - ну, попробую вечером если время будет поднять openfire и openldap, поглядеть что за проблема может быть

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

Очистила весь Cache Summary, новый контакт не могу добавить, ldap-то read only... После очистки кеша - без изменений...

Переставила полностью openfire, при установке сразу указала и FullName, и NickName в виде имени и фамилии. Те же uid в контактах, если только клиент их не хеширует...

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

Ок, поднял попенфаер и поставил спарк. могу конечно хоть обе vm расшарить, но это долго качать придется. так что пойдем сверять по буквам скринам.

для начала можешь показать список юзеров (кусок, замазав домен, не важно) и настройки группы? в плане как именно ты шаришь ростер

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

Давайте по скринам. Ростер, насколько я поняла - это список контактов. Я создаю группу 3, в нее добавляю всех из группы xmpp.

1. Списки пользователей выглядят так: http://clip2net.com/clip/m478988/dd6f0-clip-38kb.png?nocache=1

2. Группа выглядит так (группа лдапа, фильтрующая пользователей) http://clip2net.com/clip/m478988/39730-clip-20kb.png?nocache=1

3. Так выглядит ростер (одна группа 3 создана, в нее добавлены все пользователи) http://clip2net.com/clip/m478988/2f457-clip-52kb.png?nocache=1

4. Список пользователей - членов групп, подгружены из лдапа. http://clip2net.com/clip/m478988/dc933-clip-47kb.png?nocache=1

5. Вид из спарка на группу три и авторизованного пользователя gg, Имя и Фамилия, соответственно, не подгружены. http://clip2net.com/clip/m478988/a59e5-clip-12kb.png?nocache=1

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

Не, нужно шарить ростер, новый чел зашел, а там все))

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

ок, чую проблема в первом скрине. у меня поле Name тоже заполнено. ща скину конфиг

upd: http://dropmefiles.com/W1p81

сорри за шару, там один из файлов pdf, лениво было делать 2 скрина разом. и да, там 3 файла, хотя превью дает только 2.

я думаю косяк в ldap.nameField. не факт что оно умеет два поля разом, потому и тыкается в несуществующее. сейчас проверю

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 4)
Ответ на: комментарий от upcFrost

угу, в десятку. поле ldap.nameField должно содержать ровно одно значение. у меня это cn.

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

ладно, не в три. но поменять скриптом особых проблем не составит. по крайней мере на openLDAP. если там AD - тут хз, надо думать

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

ldap.nameField

Спасибо!! Поставила givenName в него, появились имена!!!

У меня cn особо не используется, оно у вас, получается, составное?

автоматом кстати можно, в 3 команды в цикле

Подскажите, как? Пользователей создаю через загрузку ldif-файла, там как-то можно переменные указать?

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

В итоге получилось так:

Переименовала значение параметра cn в «Имя Фамилия» ручками, в поле ldap.nameField поставила cn, в параметре ldap.vcard-mapping тоже заменила:

<GIVEN>{cn}</GIVEN> 
<FN>{cn}</FN> 
<NICKNAME>{cn}</NICKNAME> 

Теперь в ростере такая красота!!! Спасибо вам! Где в вашем профиле кнопка «Отблагодарить - взнос 1, 5, 10, 20 евро»? :) Ну, правда, столько со мной проморочились...

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

UPD: все написанное актуально если юзеров много и руками их поменять мягко говоря тухло (скажем 3к юзеров уже не очень весело)

У меня cn особо не используется, оно у вас, получается, составное?

ну да. в любом случае для корректной работы такой связки нужно одно поле где будет составное имя.

Подскажите, как?

ну, ладно, про три команды я чуть поспешил... есть несколько вариантов, ключевое слово - RegExp.

если есть ldif - еще проще, не надо прыгать с ldapsearch. если нет - вот пример если у нас уже есть директория, но cn в ней пустые и у юзеров не заданы.

ldapsearch -LLL -W -D cn=Manager,dc=test,dc=com -b cn=users,dc=test,dc=com -s one uid=* givenName sN |
awk 'BEGIN{i=1}{line[i++]=$0}END{j=1; while (j < i) {print line[j] ";" line[j+2] line[j+1]; j+=4}}' | 
sed 's/sn: //' | 
sed 's/givenName://' | 
sed 's/\(.*\);\(.*\)/\1\nchangetype: modify\nadd: cn\ncn: \2\n/'

эта штука ищет всх юзеров в cn=users,dc=test,dc=com, выводит мне их uid, имя и фамилию в 3 строки плюс пустая, переводит их в формат uid;sN givenName, после чего юзая точку с запятой как разделитель в 3 sed'a создает из них вот такую структуру:

dn: cn=vasya pupkin,cn=users,dc=test,dc=com
changetype: modify
add: cn
cn: pupkin vasya

эту структуру можно скормить ldapmodify.

общего решения хз есть ли, но составить регулярку на нужную схему дело минут 20-30 если каждый день этим не заниматься. ну или у нас тут есть regex-джедаи, можно их кастануть.

и да, в меня сейчас полетят тухлые помидоры за 3 sed вместо запихивания всего в один awk. сорри, я к джедаям не отношусь.

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 2)
Ответ на: комментарий от manik207

рад помочь. заодно впервые за полгода поставил ldap и попенфаер.

столько со мной проморочились

бывает, норм

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