Назад | Перейти на главную страницу

XEP-0227 импорт с внешней аутентификацией

Я пытаюсь перейти с другого сервера 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