使用smack和ejabberd进行远程名册管理

时间:2014-11-11 07:52:21

标签: xmpp ejabberd smack

我有一个用例,作为ejabberd中的管理员用户,我应该能够为所有其他用户编辑名单。我正在使用smack库连接到使用TCP连接的ejabberd服务器。

在这里阅读ejabberd 14.07的文档是mod_roster下的内容:

管理者 可以使用远程名册管理(XEP-0321)管理用户名单的远程实体列表。实施的协议部分是:4.2。远程实体请求当前用户的名单。 4.3。用户更新名单。 4.4。远程实体更新用户的名单。远程实体cab仅获取或修改与实体具有相同域的名册项。默认值为:[]。 此示例配置启用带有当前标识存储的名单版本控制。 ICQ和MSN传输可以获取ICQ和MSN联系人,添加或删除任何本地帐户:

我在ejabberd中进行了配置更改并发送了以下数据包:

<iq id='PCe38-23' to='%2B918130143322@XXX.XXX.XXX/Smack' type='set'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%2B918130143331@XXX.XXX.XXX/Smack'
                  name='Siddharth Banerjee'
                  subscription='both'>
            </item>
          </query>
            </iq>

<iq id='PCe38-24' to='%2B918130143331@XXX.XXX.XXX/Smack' type='set'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%2B918130143322@XXX.XXX.XXX/Smack'
                  name='deco'
                  subscription='both'>
            </item>
          </query>
            </iq>

但我得到以下内容:

<iq from='%2B918130143322@XXX.XXX.XXX/Smack' to='admin1@XXX.XXX.XXX/75250b26-a52a-4e1d-a5fb-4b263cd2f451' type='error' id='PCe38-23'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%2B918130143331@XXX.XXX.XXX/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修改其他用户的名单?

请指教。

2 个答案:

答案 0 :(得分:0)

我认为你误解了XEP-0321的目的。它主要是允许网关操纵用户名单的相关部分。 例如,在服务器上运行的ICQ网关可以仅为该子集操作用户(授权后)的名单条目(即@ icq.domain.net名单条目,而不是@ domain.net)。

这不是操纵整个用户名单的通用规范。

对于我在你的帖子中读到的内容,你总是使用相同的域名,所以我猜你正试图从另一个用户那里获取访​​问权限并操纵用户名单。 根据XEP-0321,它无法工作。

答案 1 :(得分:0)

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:   管理员:     用户:        - &#34;莎拉&#34;:&#34; example.org&#34; 访问:   名册:     admin:允许

模块:   ...   mod_roster:     访问:名册