Ejabberd

XEP-0227 使用外部身份驗證導入

  • May 7, 2018

我正在嘗試通過 XEP-0227 格式的轉儲從另一個 XMPP 伺服器遷移到 ejabberd。使用舊伺服器,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_piefxis 中的程式碼?

版本是 18.01-2,Ubuntu Bionic 上的預設版本。

提供假密碼對我來說不是一個好主意。

您可以提供一個假密碼,以便該過程正確繼續,然後刪除“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

引用自:https://serverfault.com/questions/910890