diff options
Diffstat (limited to 'src/ejabberd_auth_ldap.erl')
-rw-r--r-- | src/ejabberd_auth_ldap.erl | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/src/ejabberd_auth_ldap.erl b/src/ejabberd_auth_ldap.erl index 3055d1044..4fdb87b20 100644 --- a/src/ejabberd_auth_ldap.erl +++ b/src/ejabberd_auth_ldap.erl @@ -25,6 +25,8 @@ -module(ejabberd_auth_ldap). +-behaviour(ejabberd_config). + -author('alexey@process-one.net'). -behaviour(gen_server). @@ -34,16 +36,15 @@ -export([init/1, handle_info/2, handle_call/3, handle_cast/2, terminate/2, code_change/3]). -%% External exports -export([start/1, stop/1, start_link/1, set_password/3, check_password/3, check_password/5, try_register/3, dirty_get_registered_users/0, get_vh_registered_users/1, - get_vh_registered_users/2, - get_vh_registered_users_number/1, + get_vh_registered_users/2, + get_vh_registered_users_number/1, get_vh_registered_users_number/2, get_password/2, get_password_s/2, is_user_exists/2, remove_user/2, - remove_user/3, store_type/0, - plain_password_required/0]). + remove_user/3, store_type/0, plain_password_required/0, + opt_type/1]). -include("ejabberd.hrl"). -include("logger.hrl"). @@ -360,7 +361,7 @@ parse_options(Host) -> Eldap_ID = jlib:atom_to_binary(gen_mod:get_module_proc(Host, ?MODULE)), Bind_Eldap_ID = jlib:atom_to_binary( gen_mod:get_module_proc(Host, bind_ejabberd_auth_ldap)), - UIDsTemp = eldap_utils:get_opt( + UIDsTemp = gen_mod:get_opt( {ldap_uids, Host}, [], fun(Us) -> lists:map( @@ -375,7 +376,7 @@ parse_options(Host) -> end, [{<<"uid">>, <<"%u">>}]), UIDs = eldap_utils:uids_domain_subst(Host, UIDsTemp), SubFilter = eldap_utils:generate_subfilter(UIDs), - UserFilter = case eldap_utils:get_opt( + UserFilter = case gen_mod:get_opt( {ldap_filter, Host}, [], fun check_filter/1, <<"">>) of <<"">> -> @@ -386,7 +387,7 @@ parse_options(Host) -> SearchFilter = eldap_filter:do_sub(UserFilter, [{<<"%u">>, <<"*">>}]), {DNFilter, DNFilterAttrs} = - eldap_utils:get_opt({ldap_dn_filter, Host}, [], + gen_mod:get_opt({ldap_dn_filter, Host}, [], fun([{DNF, DNFA}]) -> NewDNFA = case DNFA of undefined -> @@ -398,7 +399,7 @@ parse_options(Host) -> NewDNF = check_filter(DNF), {NewDNF, NewDNFA} end, {undefined, []}), - LocalFilter = eldap_utils:get_opt( + LocalFilter = gen_mod:get_opt( {ldap_local_filter, Host}, [], fun(V) -> V end), #state{host = Host, eldap_id = Eldap_ID, bind_eldap_id = Bind_Eldap_ID, @@ -418,3 +419,27 @@ check_filter(F) -> NewF = iolist_to_binary(F), {ok, _} = eldap_filter:parse(NewF), NewF. + +opt_type(ldap_dn_filter) -> + fun ([{DNF, DNFA}]) -> + NewDNFA = case DNFA of + undefined -> []; + _ -> [iolist_to_binary(A) || A <- DNFA] + end, + NewDNF = check_filter(DNF), + {NewDNF, NewDNFA} + end; +opt_type(ldap_filter) -> fun check_filter/1; +opt_type(ldap_local_filter) -> fun (V) -> V end; +opt_type(ldap_uids) -> + fun (Us) -> + lists:map(fun ({U, P}) -> + {iolist_to_binary(U), iolist_to_binary(P)}; + ({U}) -> {iolist_to_binary(U)}; + (U) -> {iolist_to_binary(U)} + end, + lists:flatten(Us)) + end; +opt_type(_) -> + [ldap_dn_filter, ldap_filter, ldap_local_filter, + ldap_uids]. |