aboutsummaryrefslogtreecommitdiff
path: root/src/eldap_utils.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-01-23 10:54:52 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-01-23 10:54:52 +0300
commitba2b650464bd3aae2b6b0f3a3177476360cb6d08 (patch)
tree5d55501f76edcdcfe145ba0c3367a54ea0314e5c /src/eldap_utils.erl
parentDo not try to start ezlib application too frequently (diff)
Introduce new gen_mod callback: mod_options/1
The callback is supposed to provide known options and their default values, as long as the documentation. Passing default values into get_mod functions is now deprecated: all defaults should be provided by the Mod:mod_options/1 callback.
Diffstat (limited to 'src/eldap_utils.erl')
-rw-r--r--src/eldap_utils.erl55
1 files changed, 45 insertions, 10 deletions
diff --git a/src/eldap_utils.erl b/src/eldap_utils.erl
index 38bc72069..0a0d3f965 100644
--- a/src/eldap_utils.erl
+++ b/src/eldap_utils.erl
@@ -31,7 +31,8 @@
-export([generate_subfilter/1, find_ldap_attrs/2, check_filter/1,
get_ldap_attr/2, get_user_part/2, make_filter/2,
get_state/2, case_insensitive_match/2, get_config/2,
- decode_octet_string/3, uids_domain_subst/2, opt_type/1]).
+ decode_octet_string/3, uids_domain_subst/2, opt_type/1,
+ options/1]).
-include("ejabberd.hrl").
-include("logger.hrl").
@@ -180,12 +181,16 @@ get_config(Host, Opts) ->
TLSCertFile = get_opt(ldap_tls_certfile, Host, Opts),
TLSCAFile = get_opt(ldap_tls_cacertfile, Host, Opts),
TLSDepth = get_opt(ldap_tls_depth, Host, Opts),
- Port = get_opt(ldap_port, Host, Opts,
+ Port = case get_opt(ldap_port, Host, Opts) of
+ undefined ->
case Encrypt of
tls -> ?LDAPS_PORT;
starttls -> ?LDAP_PORT;
_ -> ?LDAP_PORT
- end),
+ end;
+ P ->
+ P
+ end,
RootDN = get_opt(ldap_rootdn, Host, Opts, <<"">>),
Password = get_opt(ldap_password, Host, Opts, <<"">>),
Base = get_opt(ldap_base, Host, Opts, <<"">>),
@@ -348,7 +353,12 @@ collect_parts_bit([],Acc,Uacc) ->
(ldap_uids) -> fun((uids()) -> uids());
(atom()) -> [atom()].
opt_type(deref_aliases) ->
- opt_type(ldap_deref_aliases);
+ fun(unspecified) -> unspecified;
+ (never) -> never;
+ (searching) -> searching;
+ (finding) -> finding;
+ (always) -> always
+ end;
opt_type(ldap_backups) ->
fun (L) -> [iolist_to_binary(H) || H <- L] end;
opt_type(ldap_base) -> fun iolist_to_binary/1;
@@ -365,25 +375,33 @@ opt_type(ldap_encrypt) ->
end;
opt_type(ldap_password) -> fun iolist_to_binary/1;
opt_type(ldap_port) ->
- fun (I) when is_integer(I), I > 0 -> I end;
+ fun(undefined) -> undefined;
+ (I) when is_integer(I), I > 0 -> I
+ end;
opt_type(ldap_rootdn) -> fun iolist_to_binary/1;
opt_type(ldap_servers) ->
fun (L) -> [iolist_to_binary(H) || H <- L] end;
opt_type(ldap_tls_certfile) ->
- fun(S) ->
- binary_to_list(ejabberd_pkix:try_certfile(S))
+ fun(undefined) -> undefined;
+ (S) -> binary_to_list(ejabberd_pkix:try_certfile(S))
end;
opt_type(ldap_tls_cacertfile) ->
- fun(S) -> binary_to_list(misc:try_read_file(S)) end;
+ fun(undefined) -> undefined;
+ (S) -> binary_to_list(misc:try_read_file(S))
+ end;
opt_type(ldap_tls_depth) ->
- fun (I) when is_integer(I), I >= 0 -> I end;
+ fun(undefined) -> undefined;
+ (I) when is_integer(I), I >= 0 -> I
+ end;
opt_type(ldap_tls_verify) ->
fun (hard) -> hard;
(soft) -> soft;
(false) -> false
end;
opt_type(ldap_filter) ->
- fun check_filter/1;
+ fun(<<"">>) -> <<"">>;
+ (F) -> check_filter(F)
+ end;
opt_type(ldap_uids) ->
fun (Us) ->
lists:map(fun ({U, P}) ->
@@ -399,3 +417,20 @@ opt_type(_) ->
ldap_port, ldap_rootdn, ldap_servers, ldap_filter,
ldap_tls_certfile, ldap_tls_cacertfile, ldap_tls_depth,
ldap_tls_verify].
+
+options(_) ->
+ [{deref_aliases, unspecified},
+ {ldap_backups, []},
+ {ldap_base, <<"">>},
+ {ldap_uids, [{<<"uid">>, <<"%u">>}]},
+ {ldap_deref_aliases, never},
+ {ldap_encrypt, none},
+ {ldap_password, <<"">>},
+ {ldap_port, undefined},
+ {ldap_rootdn, <<"">>},
+ {ldap_servers, [<<"localhost">>]},
+ {ldap_filter, <<"">>},
+ {ldap_tls_certfile, undefined},
+ {ldap_tls_cacertfile, undefined},
+ {ldap_tls_depth, undefined},
+ {ldap_tls_verify, false}].