diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/auth/ldap_authenticator.ex | 45 | 
1 files changed, 27 insertions, 18 deletions
| diff --git a/lib/pleroma/web/auth/ldap_authenticator.ex b/lib/pleroma/web/auth/ldap_authenticator.ex index 17ffd820d..c2c5eb1e5 100644 --- a/lib/pleroma/web/auth/ldap_authenticator.ex +++ b/lib/pleroma/web/auth/ldap_authenticator.ex @@ -102,28 +102,37 @@ defmodule Pleroma.Web.Auth.LDAPAuthenticator do             {:scope, :eldap.wholeSubtree()},             {:timeout, @search_timeout}           ]) do -      {:ok, {:eldap_search_result, [{:eldap_entry, _, attributes}], _}} -> -        params = %{ -          name: name, -          nickname: name, -          password: nil -        } - -        params = -          case List.keyfind(attributes, ~c"mail", 0) do -            {_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail)) -            _ -> params -          end - -        changeset = User.register_changeset_ldap(%User{}, params) +      # The :eldap_search_result record structure changed in OTP 24.3 and added a controls field +      # https://github.com/erlang/otp/pull/5538 +      {:ok, {:eldap_search_result, [{:eldap_entry, _object, attributes}], _referrals}} -> +        try_register(name, attributes) -        case User.register(changeset) do -          {:ok, user} -> user -          error -> error -        end +      {:ok, {:eldap_search_result, [{:eldap_entry, _object, attributes}], _referrals, _controls}} -> +        try_register(name, attributes)        error ->          error      end    end + +  defp try_register(name, attributes) do +    params = %{ +      name: name, +      nickname: name, +      password: nil +    } + +    params = +      case List.keyfind(attributes, ~c"mail", 0) do +        {_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail)) +        _ -> params +      end + +    changeset = User.register_changeset_ldap(%User{}, params) + +    case User.register(changeset) do +      {:ok, user} -> user +      error -> error +    end +  end  end | 
