XEP-0163 支持和 mod_pubsub 配置

问题描述

我在 Gentoo 服务器上使用 ejabberd 20.04,但很难让 XEP-0163(个人事件协议)再次工作。我正在“再次”写作,因为它在某些时候起作用了。但我的设置可以追溯到 2009 年,版本为 2.something...

首先,这里是我的 ejabberd.yml 配置文件中的相关当前配置位。

modules:
  ...
  mod_caps: {}
  mod_pubsub:
    access_create_node: local
    default_node_config:
      notification_type: normal
      notify_retract: false
      max_items: 10
    plugins:
      - flat
      - pep

append_host_config:
  "MYSERVER.COM":
    modules:
      mod_register:
        access:
          - deny
    ...
    auth_method: external
    extauth_program: "/path/to/some/script/ejabberd.py"

一切正常,但使用 Psi+(目前在 Windows 上为 v1.5.1477),例如在设置我的心情时,我收到了这个回复

<iq id="aca5a" type="set">
  <pubsub xmlns="http://jabber.org/protocol/pubsub">
    <publish node="http://jabber.org/protocol/mood">
      <item id="current">
        <mood xmlns="http://jabber.org/protocol/mood">
          <sick/>
          <text>Grrrr</text>
        </mood>
      </item>
    </publish>
  </pubsub>
</iq>

<iq to="[email protected]/Psi+" xml:lang="fr"
    from="[email protected]" id="aca5a" type="error">
  <pubsub xmlns="http://jabber.org/protocol/pubsub">
    <publish node="http://jabber.org/protocol/mood">
      <item id="current">
        <mood xmlns="http://jabber.org/protocol/mood">
          <sick/>
          <text>Grrrr</text>
        </mood>
      </item>
    </publish>
  </pubsub>
  <error code="403" type="auth">
    <forbidden xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
  </error>
</iq>

我认为这是 ACL 的问题,所以我尝试将其替换为:

    access_create_node:
      allow: all

但我仍然有相同的答复。所以我知道存在身份验证问题,但我不明白是什么。

这可能是外部身份验证的问题吗?它对其他一切都很好,我在脚本日志中没有看到任何错误(我写的东西输出了一些关于 ejabberd 请求的日志)。

(不确定我的问题属于这里,我的猜测是它更适合 Serverfault 但 ProcessOne 重定向到这里。)

解决方法

我安装了 ejabberd 20.04,像你一样配置了 mod_pubsub,并将示例 checl_pass_null.pl 设置为 extauth 程序

然后我发送相同的 IQ 节,ejabberd 正确回复。

您可以尝试使用该 extauth 脚本,如果它工作正常,则说明您的 extauth 脚本中缺少某些内容。

如果示例 check_pass_null.pl 仍然失败,那么问题可能出在您对默认配置所做的其他更改中。您可以尝试使用默认配置(几乎没有更改)。如果它有效,您可以调查哪些自定义选项会破坏发布订阅。