summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbdullah Al-Shehabi <abdullah.alshehabi@gmail.com>2020-12-08 10:03:41 -0800
committerHans Nilsson <hans@erlang.org>2021-02-01 10:02:02 +0100
commit0a1d867d374280f31627f756f6ba84703d0b5200 (patch)
treeedc3b89afb29e365ce28b8973adfbc9e543d52d7
parent7e4c5d17d0be859fa1886edb48b9fc0aa1ce0c44 (diff)
downloaderlang-0a1d867d374280f31627f756f6ba84703d0b5200.tar.gz
eldap: Add ability to specify size limit on ldap requests
-rw-r--r--lib/eldap/include/eldap.hrl1
-rw-r--r--lib/eldap/src/eldap.erl10
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])}).