diff options
| -rw-r--r-- | changelog.d/ldap.fix | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/auth/ldap_authenticator.ex | 45 | ||||
| -rw-r--r-- | mix.exs | 3 | 
3 files changed, 30 insertions, 19 deletions
| diff --git a/changelog.d/ldap.fix b/changelog.d/ldap.fix new file mode 100644 index 000000000..9ca697287 --- /dev/null +++ b/changelog.d/ldap.fix @@ -0,0 +1 @@ +Fix LDAP support 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 @@ -80,7 +80,8 @@ defmodule Pleroma.Mixfile do            :comeonin,            :fast_sanitize,            :os_mon, -          :ssl +          :ssl, +          :eldap          ] ++ logger_application(),        included_applications: [:ex_syslogger]      ] | 
