Xmpp ejabberd 和 add-user 命令

Posted

技术标签:

【中文标题】Xmpp ejabberd 和 add-user 命令【英文标题】:Xmpp ejabberd and add-user command 【发布时间】:2009-08-29 21:34:15 【问题描述】:

我有两台 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>

我不明白为什么我得到一个,我看不到任何特定的选项来告诉服务器接受来自远程的命令?

【问题讨论】:

【参考方案1】:

也许mod_configure 根本没有加载到远程服务器上。 您可以在 ejabberd 管理 shell 中通过 lists:member(mod_configure, gen_mod:loaded_modules("foobar.com")). 进行检查。 我无法想象这是关于成为远程用户,因为 foobar.com 和 greg@foobar.com 之间不需要 s2s 连接。

【讨论】:

【参考方案2】:

查看the mod_configure.erl source code 似乎有一个 ACL 检查,以确保仅当请求者在用户帐户上且在该虚拟主机上配置 priv 时才允许配置临时命令。默认情况下,我认为他们没有。

acl:match_rule(LServer, configure, From)

您可能需要添加类似...

access, configure, [allow, greg@foobar.com].

...到您的 ejabberd.cfg 文件。

【讨论】:

以上是关于Xmpp ejabberd 和 add-user 命令的主要内容,如果未能解决你的问题,请参考以下文章

XMPP 流量记录 (ejabberd 13.12)

SIP/XMPP:ejabberd 和 mod_register:注册:禁止

如何在 ejabberd 中的 xmpp 消息正文中附加自定义数据

无法使用 react-native-xmpp 连接到 Ejabberd 服务器

ejabberd xmpp 连接未维护

如何使用 XMPPHP 客户端创建 XMPP(ejabberd) 用户