aboutsummaryrefslogtreecommitdiff
path: root/src/eldap
diff options
context:
space:
mode:
Diffstat (limited to 'src/eldap')
-rw-r--r--src/eldap/eldap_filter.erl2
-rw-r--r--src/eldap/eldap_utils.erl16
2 files changed, 18 insertions, 0 deletions
diff --git a/src/eldap/eldap_filter.erl b/src/eldap/eldap_filter.erl
index e1b5be303..d2e1b66a4 100644
--- a/src/eldap/eldap_filter.erl
+++ b/src/eldap/eldap_filter.erl
@@ -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} ->
diff --git a/src/eldap/eldap_utils.erl b/src/eldap/eldap_utils.erl
index b8ddee36b..5f3a24283 100644
--- a/src/eldap/eldap_utils.erl
+++ b/src/eldap/eldap_utils.erl
@@ -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.