Удаленное управление реестром с помощью smack и ejabberd

У меня есть вариант использования, в котором как пользователь-администратор ejabberd я должен иметь возможность редактировать списки для всех других пользователей. Я использую библиотеку smack для подключения к серверу ejabberd с использованием TCP-соединения.

Читая документацию ejabberd 14.07, вот что написано в разделе mod_roster:

менеджеры Список удаленных объектов, которые могут управлять списками пользователей с помощью удаленного управления списками (XEP-0321). Реализованы следующие разделы протокола: 4.2. Удаленный объект запрашивает список текущего пользователя. 4.3. Пользователь обновляет список. 4.4. Удаленный объект обновляет список пользователей. Кабина удаленного объекта получает или изменяет только те элементы реестра, которые имеют тот же домен, что и объект. Значение по умолчанию: []. Этот пример конфигурации включает управление версиями реестра с сохранением текущего идентификатора. Транспорты ICQ и MSN могут получать контакты ICQ и MSN, добавлять или удалять их для любой локальной учетной записи:

Я внес изменения в конфигурацию ejabberd и отправил следующие пакеты:

<iq id='PCe38-23' to='%[email protected]/Smack' type='set'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%[email protected]/Smack'
                  name='Siddharth Banerjee'
                  subscription='both'>
            </item>
          </query>
            </iq>

<iq id='PCe38-24' to='%[email protected]/Smack' type='set'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%[email protected]/Smack'
                  name='deco'
                  subscription='both'>
            </item>
          </query>
            </iq>

Но я получаю следующее:

<iq from='%[email protected]/Smack' to='[email protected]/75250b26-a52a-4e1d-a5fb-4b263cd2f451' type='error' id='PCe38-23'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%[email protected]/Smack' name='Siddharth Banerjee' subscription='both'>
            </item>
          </query>
            <error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>

Как изменить список другого пользователя с помощью smack?

Пожалуйста, порекомендуйте.


person Siddharth Banerjee    schedule 11.11.2014    source источник


Ответы (2)


Я думаю, вы неправильно понимаете назначение XEP-0321. В основном это позволяет шлюзам манипулировать соответствующей частью списка пользователей. Например, шлюз для ICQ, работающий на сервере, может манипулировать записью в реестре для пользователя (после авторизации) только для этого подмножества (т. е. записей в реестре @icq.domain.net, а не @domain.net).

Это НЕ общая спецификация для управления всем списком пользователей.

Судя по тому, что я прочитал в вашем посте, вы всегда используете один и тот же домен, поэтому я предполагаю, что вы пытаетесь получить доступ и управлять списком пользователей от другого пользователя. Это не может работать согласно XEP-0321.

person Mickaël Rémond    schedule 30.11.2014

https://blog.process-one.net/roster_versioning_support_for_ejabberd/

Этот пример конфигурации включает управление версиями реестра с сохранением текущего идентификатора. Транспорты ICQ и MSN могут получать контакты ICQ и MSN, добавлять или удалять их для любой локальной учетной записи:

modules:
  ...
  mod_roster:
    versioning: true
    store_current_id: true
    managers:
     - "icq.example.org"
     - "msn.example.org"
  ...

В этом примере конфигурации только администраторы могут управлять своими списками; все остальные не могут изменять список:

acl: admin: user: - "sarah": "example.org" доступ: список: admin: разрешить

модули: ... mod_roster: доступ: список

person kobra34    schedule 14.02.2015