Подниму темку.
Имею Сервер OpenFire + Клиенты Miranda (MirandaNG, переезжаем потихоньку). На сервере по группам (службы) забиты юзеры с полным ФИО в поле name (Не! AD). Юзеры на сервере менять name не могут.
Насколько я понимаю, иерархия хранения выглядит так: ФИО (по сути это vcard) хранится в трех местах
1) на сервере в основном списке клиентов (уровень А),
2) на сервере в ростере каждого пользователя (уровень Б),
3) на клиенте в профиле (уровень В).
Ранее наблюдалось такое поведение. Считаем что основной перечень (А) заведен админом. Клиент при первом подключении создает свой росте на сервере (Б) и тянет его на себя (В), где хранит его в .dat файле. Если админ менял ФИО на сервере в основном списке (А), то при переподключении всеми пользователями эти изменения заносились как в ростер на сервере (Б), так и в профиль (В). Тогда использовалась версия Миранды 0.4.3
Таким образом, в случае правки пользователем ФИО на клиенте для восстановления было достаточно убить запись в клиенте (В), и при переподключении восстанавливались данные vcard из основного списка. Это всех устраивает (админа так точно). Люди увольняются, приходят новые, меняем name – vcard у всех обновляется безусловно.
Начали переход на более позднюю версию клиента (0.8.10.0). Сервер не трогали. И тут поведение изменилось. Vcard начал обновляться не у всех при смене name на сервере. Разбор полетов выяснил, что обновляются данные у тех, кто не менял информацию у себя в клиенте (не было изменения на уровне (В)). То есть достаточно было переименовать на клиенте «Иванова Марина Владимировна» на «Бухгалтер», и при смене админом на сервере (на уровне (А)) «Иванова Марина Владимировна» на «Петрова Юлия Семеновна» на клиенте останется «Бухгалтер». Причем, даже удаление записи на клиенте и повторный вход не изменит ситуацию. Запись «Бухгалтер» остается в ростере на сервере на уровне (Б).
Переход на MirandaNG ситуацию не изменил. Если раньше при смене сотрудника достаточно было изменить поле name на сервере, и на утро у всех список обновлялся, то сейчас приходится каждый раз убивать пользователя на сервере (это удаляет всю инфу о пользователе включая vcard из ростеров пользователей) и пересоздавать пользователя с тем же jid и новым name. Все бы ничего, но это гробит историю переписки на клиентах, так как новый пользователь приходит «с нуля», а это не всегда удобно…
Вопрос к разработчикам: можно ли на клиенте убить запись о пользователе с удалением записи в ростере на сервере (Б)? Если нельзя, то в принципе ситуацию нужно решать со стороны сервера, где ставить признак принудительной синхронизации ростера клиента с основным списком (не знаю, как правильно его назвать). А в старой версии миранды ведь все работало хорошо…
Что можно предпринять в данной ситуации?