我有一个用例,在这个用例中,作为ejabberd的管理员用户,我应该能够编辑所有其他用户的花名册。我正在使用smack库通过TCP连接连接到ejabberd服务器。
阅读ejabberd14.07的文档是它在mod_roster下所说的:
可使用远程花名册管理管理用户花名册的远程实体的管理员列表(XEP-0321)。实现的协议部分为: 4.2。远程实体请求当前用户的花名册。4.3。用户更新花名册。4.4。远程实体更新用户的花名册。远程实体只能获取或修改与该实体具有相同域的花名册项目。默认值为:[]。此示例配置启用具有当前id存储的花名册版本控制。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修改其他用户的花名册?
请给我建议。
发布于 2014-12-01 00:44:44
我想你误解了XEP-0321的用途。它主要是允许网关操作用户花名册的相关部分。例如,在服务器上运行的ICQ的网关可以仅为该子集操作用户的花名册条目(授权后)(即@icq.domain.net花名册条目,而不是@domain.net)。
这不是操作整个用户花名册的通用规范。
根据我在你的帖子中看到的,你总是使用相同的域名,所以我猜你是在试图从另一个用户那里获得访问和操纵用户名单。根据XEP-0321,它不能工作。
发布于 2015-02-14 22:11:56
https://blog.process-one.net/roster_versioning_support_for_ejabberd/
此示例配置启用具有当前id存储的花名册版本控制。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: allow
模块:...mod_roster:访问:花名册
https://stackoverflow.com/questions/26860069
复制相似问题