diff options
| author | Abdullah Al-Shehabi <abdullah.alshehabi@gmail.com> | 2020-12-08 10:03:41 -0800 |
|---|---|---|
| committer | Hans Nilsson <hans@erlang.org> | 2021-02-01 10:02:02 +0100 |
| commit | 0a1d867d374280f31627f756f6ba84703d0b5200 (patch) | |
| tree | edc3b89afb29e365ce28b8973adfbc9e543d52d7 | |
| parent | 7e4c5d17d0be859fa1886edb48b9fc0aa1ce0c44 (diff) | |
| download | erlang-0a1d867d374280f31627f756f6ba84703d0b5200.tar.gz | |
eldap: Add ability to specify size limit on ldap requests
| -rw-r--r-- | lib/eldap/include/eldap.hrl | 1 | ||||
| -rw-r--r-- | lib/eldap/src/eldap.erl | 10 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/eldap/include/eldap.hrl b/lib/eldap/include/eldap.hrl index 7c12cd4f2b..b670de871f 100644 --- a/lib/eldap/include/eldap.hrl +++ b/lib/eldap/include/eldap.hrl @@ -7,6 +7,7 @@ -record(eldap_search, { base = [], % Baseobject filter = [], % Search conditions + size_limit = 0, % Setting default size limit to 0 makes it unlimited scope=wholeSubtree, % Search scope deref=derefAlways, % Dereference attributes = [], % Attributes to be returned diff --git a/lib/eldap/src/eldap.erl b/lib/eldap/src/eldap.erl index 9b7e254dfe..c647083024 100644 --- a/lib/eldap/src/eldap.erl +++ b/lib/eldap/src/eldap.erl @@ -326,6 +326,8 @@ parse_search_args([{base, Base}|T],A) -> parse_search_args(T,A#eldap_search{base = Base}); parse_search_args([{filter, Filter}|T],A) -> parse_search_args(T,A#eldap_search{filter = Filter}); +parse_search_args([{size_limit, SizeLimit}|T],A) when is_integer(SizeLimit) -> + parse_search_args(T,A#eldap_search{size_limit = SizeLimit}); parse_search_args([{scope, Scope}|T],A) -> parse_search_args(T,A#eldap_search{scope = Scope}); parse_search_args([{deref, Deref}|T],A) -> @@ -749,7 +751,7 @@ do_search_0(Data, A, Controls) -> Req = #'SearchRequest'{baseObject = A#eldap_search.base, scope = v_scope(A#eldap_search.scope), derefAliases = v_deref(A#eldap_search.deref), - sizeLimit = 0, % no size limit + sizeLimit = v_size_limit(A#eldap_search.size_limit), timeLimit = v_timeout(A#eldap_search.timeout), typesOnly = v_bool(A#eldap_search.types_only), filter = v_filter(A#eldap_search.filter), @@ -777,6 +779,9 @@ collect_search_responses(Data, S, ID, {ok,Msg}, Acc, Ref) success -> log2(Data, "search reply = searchResDone ~n", []), {ok,Acc,Ref,Data}; + sizeLimitExceeded -> + log2(Data, "[TRUNCATED] search reply = searchResDone ~n", []), + {ok,Acc,Ref,Data}; referral -> {{ok, {referral,R#'LDAPResult'.referral}}, Data}; Reason -> @@ -1088,6 +1093,9 @@ v_bool(true) -> true; v_bool(false) -> false; v_bool(_Bool) -> throw({error,concat(["not Boolean: ",_Bool])}). +v_size_limit(I) when is_integer(I), I>=0 -> I; +v_size_limit(_I) -> throw({error,concat(["size_limit not positive integer: ",_I])}). + v_timeout(I) when is_integer(I), I>=0 -> I; v_timeout(_I) -> throw({error,concat(["timeout not positive integer: ",_I])}). |
