我有两台ejabberd服务器,一台本地服务器在foobar.com上在线远程。
使用xmpp pidgin控制台我可以发送iq节进行测试:
本地服务器主机名是eepc
<iq to='eeepc' from='greg@eeepc' id='get-registred-users-num-1' type='set'>
<command xmlns='http://jabber.org/protocol/commands' action='execute' node='http://jabber.org/protocol/admin#get-registered-users-num'/>
</iq>
<iq from='eeepc' to='greg@eeepc/3493331071251540036345753' id='get-registred-users-num-1' type='result'>
<command xmlns='http://jabber.org/protocol/commands' sessionid='2009-08-29T14:01:55.714639Z' node='http://jabber.org/protocol/admin#get-registered-users-num' status='completed'>
<x xmlns='jabber:x:data'>
<field type='hidden' var='FORM_TYPE'>
<value>http://jabber.org/protocol/admin</value>
</field>
<field type='text-single' label='Number of registered users' var='registeredusersnum'>
<value>7</value>
</field>
</x>
</command>
</iq>
远程服务器
<iq to='foobar.com' from='greg@foobar.com' id='get-registred-users-num-1' type='set'>
<command xmlns='http://jabber.org/protocol/commands' action='execute' node='http://jabber.org/protocol/admin#get-registered-users-num'/>
</iq>
<iq from='foobar.com' to='greg@foobar.com/36523779951251567671615394' id='get-registred-users-num-1' type='error'>
<command xmlns='http://jabber.org/protocol/commands' action='execute' node='http://jabber.org/protocol/admin#get-registered-users-num'/>
<error code='404' type='cancel'>
<item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
我不明白为什么我会得到一个,我看不到任何特定的选项告诉服务器接受来自远程的命令?
答案 0 :(得分:1)
可能mod_configure
根本没有加载到远程服务器上。
您可以在ejabberd管理员shell中通过lists:member(mod_configure, gen_mod:loaded_modules("foobar.com")).
进行检查。
我无法想象这是一个远程用户,因为foobar.com和greg@foobar.com之间不需要s2s连接。
答案 1 :(得分:0)
查看the mod_configure.erl source code似乎存在ACL检查,以确保仅当请求者位于用户帐户上且该虚拟主机上具有configure priv时才允许配置adhoc命令。默认情况下,我认为他们没有。
acl:match_rule(LServer, configure, From)
您可能需要添加类似......
的内容{access, configure, [{allow, greg@foobar.com}]}.
...到你的ejabberd.cfg文件。