Я пытаюсь перейти с другого сервера XMPP на ejabberd через дамп в формате XEP-0227. Используется старый сервер, и ejabberd будет использовать PAM для аутентификации пользователя. Следовательно, в <user/>
записи в дампе.
<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_piefx?
Версия 18.01-2, по умолчанию в Ubuntu Bionic.
Поддельный пароль мне не кажется хорошим предложением.
Вы можете указать поддельный пароль, чтобы процесс продолжался правильно, а затем удалите содержимое таблицы мнезии 'passwd' (например, с помощью WebAdmin). Или...
Или необходимо изменение кода в ejabberd_piefx?
... вы можете применить этот небольшой патч, который позволяет обходить создание учетной записи в случае сбоя с пустым паролем. Если вы можете попробовать этот патч, прокомментируйте, работает ли он, чтобы рассмотреть возможность включения его в 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