File 3401-eldap-Add-ability-to-specify-size-limit-on-ldap-requ.patch of Package erlang

From 0a1d867d374280f31627f756f6ba84703d0b5200 Mon Sep 17 00:00:00 2001
From: Abdullah Al-Shehabi <abdullah.alshehabi@gmail.com>
Date: Tue, 8 Dec 2020 10:03:41 -0800
Subject: [PATCH 1/2] eldap: Add ability to specify size limit on ldap requests

---
 lib/eldap/include/eldap.hrl |  1 +
 lib/eldap/src/eldap.erl     | 10 +++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

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])}).
 
-- 
2.26.2

openSUSE Build Service is sponsored by