logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: 7a4687562a827a77d0025f181a319287948d69a1
parent e1981264a3e1a4d043ed99b0c8b0cbcc72a29e7a
Author: feld <feld@feld.me>
Date:   Mon,  1 Jul 2024 20:38:20 +0000

Merge branch 'fix/ldap' into 'develop'

Fix LDAP support

See merge request pleroma/pleroma!4168

Diffstat:

Achangelog.d/ldap.fix1+
Mlib/pleroma/web/auth/ldap_authenticator.ex45+++++++++++++++++++++++++++------------------
Mmix.exs3++-
3 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/changelog.d/ldap.fix 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 @@ -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 diff --git a/mix.exs b/mix.exs @@ -80,7 +80,8 @@ defmodule Pleroma.Mixfile do :comeonin, :fast_sanitize, :os_mon, - :ssl + :ssl, + :eldap ] ++ logger_application(), included_applications: [:ex_syslogger] ]