mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-20 16:15:59 +01:00
Log an error when an LDAP filter is incorrect (EJAB-1395)
This commit is contained in:
parent
b9e1bc34da
commit
6cc6c04c4a
@ -398,7 +398,9 @@ parse_options(Host) ->
|
||||
UserFilter = case ejabberd_config:get_local_option({ldap_filter, Host}) of
|
||||
undefined -> SubFilter;
|
||||
"" -> SubFilter;
|
||||
F -> "(&" ++ SubFilter ++ F ++ ")"
|
||||
F ->
|
||||
eldap_utils:check_filter(F),
|
||||
"(&" ++ SubFilter ++ F ++ ")"
|
||||
end,
|
||||
SearchFilter = eldap_filter:do_sub(UserFilter, [{"%u", "*"}]),
|
||||
LDAPBase = ejabberd_config:get_local_option({ldap_base, Host}),
|
||||
@ -411,7 +413,8 @@ parse_options(Host) ->
|
||||
{DNF, DNFA} ->
|
||||
{DNF, DNFA}
|
||||
end,
|
||||
LocalFilter = ejabberd_config:get_local_option({ldap_local_filter, Host}),
|
||||
eldap_utils:check_filter(DNFilter),
|
||||
LocalFilter = ejabberd_config:get_local_option({ldap_local_filter, Host}),
|
||||
#state{host = Host,
|
||||
eldap_id = Eldap_ID,
|
||||
bind_eldap_id = Bind_Eldap_ID,
|
||||
|
@ -82,6 +82,8 @@ parse(L) when is_list(L) ->
|
||||
%%%-------------------------------------------------------------------
|
||||
parse(L, SList) when is_list(L), is_list(SList) ->
|
||||
case catch eldap_filter_yecc:parse(scan(L, SList)) of
|
||||
{'EXIT', _} = Err ->
|
||||
{error, Err};
|
||||
{error, {_, _, Msg}} ->
|
||||
{error, Msg};
|
||||
{ok, Result} ->
|
||||
|
@ -35,8 +35,11 @@
|
||||
make_filter/2,
|
||||
get_state/2,
|
||||
case_insensitive_match/2,
|
||||
check_filter/1,
|
||||
uids_domain_subst/2]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
|
||||
%% Generate an 'or' LDAP query on one or several attributes
|
||||
%% If there is only one attribute
|
||||
generate_subfilter([UID]) ->
|
||||
@ -144,3 +147,16 @@ uids_domain_subst(Host, UIDs) ->
|
||||
(A) -> A
|
||||
end,
|
||||
UIDs).
|
||||
|
||||
check_filter(undefined) ->
|
||||
ok;
|
||||
check_filter(Filter) ->
|
||||
case eldap_filter:parse(Filter) of
|
||||
{ok, _} ->
|
||||
ok;
|
||||
Err ->
|
||||
?ERROR_MSG("failed to parse LDAP filter:~n"
|
||||
"** Filter: ~p~n"
|
||||
"** Reason: ~p",
|
||||
[Filter, Err])
|
||||
end.
|
||||
|
@ -619,7 +619,9 @@ parse_options(Host, Opts) ->
|
||||
RF ->
|
||||
RF
|
||||
end,
|
||||
|
||||
lists:foreach(fun eldap_utils:check_filter/1,
|
||||
[ConfigFilter, ConfigUserFilter,
|
||||
ConfigGroupFilter, RosterFilter]),
|
||||
SubFilter = "(&("++UIDAttr++"="++UIDAttrFormat++")("++GroupAttr++"=%g))",
|
||||
UserSubFilter = case ConfigUserFilter of
|
||||
undefined -> eldap_filter:do_sub(SubFilter, [{"%g", "*"}]);
|
||||
|
@ -740,10 +740,14 @@ parse_options(Host, Opts) ->
|
||||
case ejabberd_config:get_local_option({ldap_filter, Host}) of
|
||||
undefined -> SubFilter;
|
||||
"" -> SubFilter;
|
||||
F -> "(&" ++ SubFilter ++ F ++ ")"
|
||||
F ->
|
||||
eldap_utils:check_filter(F),
|
||||
"(&" ++ SubFilter ++ F ++ ")"
|
||||
end;
|
||||
"" -> SubFilter;
|
||||
F -> "(&" ++ SubFilter ++ F ++ ")"
|
||||
F ->
|
||||
eldap_utils:check_filter(F),
|
||||
"(&" ++ SubFilter ++ F ++ ")"
|
||||
end,
|
||||
{ok, SearchFilter} = eldap_filter:parse(
|
||||
eldap_filter:do_sub(UserFilter, [{"%u","*"}])),
|
||||
|
Loading…
Reference in New Issue
Block a user