我有一个用例,作为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修改其他用户的名单?
请指教。
答案 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: 访问:名册