<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