diff options
Diffstat (limited to 'src/eldap')
-rw-r--r-- | src/eldap/eldap_filter.erl | 2 | ||||
-rw-r--r-- | src/eldap/eldap_utils.erl | 16 |
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. |