XEP-0227 使用外部身份验证导入

XEP-0227 使用外部身份验证导入

<user/>我正在尝试通过 XEP-0227 格式的转储从另一个 XMPP 服务器迁移到 ejabberd。旧服务器使用,而 ejabberd 将使用 PAM 进行用户身份验证。因此,转储中的条目中没有密码数据。

<server-data xmlns="urn:xmpp:pie:0">
  <host jid="localhost">
    <user name="watcher">
    ...
    </user>
  ...
  </host>
</server-data>

当我尝试从转储导入数据时,出现错误:

2018-05-05 19:05:30.888 [error] <0.605.0>@ejabberd_piefxis:stop:539 Failed to create user 'watcher': invalid_password

在我看来,提供假密码不是一个好主意。有什么技巧可以让它奏效吗?还是我完全偏离了轨道?或者是否需要更改 ejabberd_piefxis 中的代码?

该版本是 18.01-2,Ubuntu Bionic 的默认版本。

答案1

对我来说,提供假密码不是一个好主意。

您可以提供一个假密码,以便进程继续正确运行,然后删除“passwd”mnesia 表的内容(例如,使用 WebAdmin)。或者...

或者是否需要更改 ejabberd_piefxis 中的代码?

...您可以应用这个小补丁,当使用空密码失败时,它可以绕过帐户创建。如果您能够尝试该补丁,请评论它是否有效,并考虑将其包含在 ejabberd 中。

diff --git a/src/ejabberd_piefxis.erl b/src/ejabberd_piefxis.erl
index c73c8b3a4..afb0e1a05 100644
--- a/src/ejabberd_piefxis.erl
+++ b/src/ejabberd_piefxis.erl
@@ -404,6 +404,8 @@ process_user(#xmlel{name = <<"user">>, attrs = Attrs, children = Els},
             case ejabberd_auth:try_register(LUser, LServer, Pass) of
                 ok ->
                     process_user_els(Els, State#state{user = LUser});
+                {error, invalid_password} when (Password == <<>>) ->
+                    process_user_els(Els, State#state{user = LUser});
                 {error, Err} ->
                     stop("Failed to create user '~s': ~p", [Name, Err])
             end

相关内容