From 23deefde7d558d04706b2d5fbf11fdeca77fffe0 Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Sun, 5 Oct 2014 17:26:57 -0700 Subject: [PATCH 01/14] implement search timeout --- lib/net/ldap.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/net/ldap.rb b/lib/net/ldap.rb index 5effe57a..e03fd4dd 100644 --- a/lib/net/ldap.rb +++ b/lib/net/ldap.rb @@ -609,6 +609,7 @@ def open # Net::LDAP::SearchScope_WholeSubtree. Default is WholeSubtree.) # * :size (an integer indicating the maximum number of search entries to # return. Default is zero, which signifies no limit.) + # * :time (an integer restricting the maximum time in seconds allowed for a search RFC 4511 4.5.1.5) # * :deref (one of: Net::LDAP::DerefAliases_Never, Net::LDAP::DerefAliases_Search, # Net::LDAP::DerefAliases_Find, Net::LDAP::DerefAliases_Always. Default is Never.) # @@ -1485,6 +1486,7 @@ def search(args = {}) search_attributes = ((args && args[:attributes]) || []).map { |attr| attr.to_s.to_ber} return_referrals = args && args[:return_referrals] == true sizelimit = (args && args[:size].to_i) || 0 + timelimit = (args && args[:time].to_i) || 0 raise Net::LDAP::LdapError, "invalid search-size" unless sizelimit >= 0 paged_searches_supported = (args && args[:paged_searches_supported]) @@ -1548,7 +1550,7 @@ def search(args = {}) scope.to_ber_enumerated, deref.to_ber_enumerated, query_limit.to_ber, # size limit - 0.to_ber, + timelimit.to_ber, attributes_only.to_ber, search_filter.to_ber, search_attributes.to_ber_sequence From 8048c5d25d23030ae3825f68bf28d10a41e41d9f Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Sun, 5 Oct 2014 17:27:08 -0700 Subject: [PATCH 02/14] add timelimit to instrumentation --- lib/net/ldap.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/net/ldap.rb b/lib/net/ldap.rb index e03fd4dd..dc395a5b 100644 --- a/lib/net/ldap.rb +++ b/lib/net/ldap.rb @@ -1529,6 +1529,7 @@ def search(args = {}) :base => search_base, :scope => scope, :limit => sizelimit, + :timelimit => timelimit, :sort => sort_control, :referrals => return_referrals, :deref => deref, From 3c2c5e63589e26ffe3804cb6cd588bc268d20547 Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Sun, 5 Oct 2014 17:33:08 -0700 Subject: [PATCH 03/14] document the default --- lib/net/ldap.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/net/ldap.rb b/lib/net/ldap.rb index dc395a5b..0a2625ed 100644 --- a/lib/net/ldap.rb +++ b/lib/net/ldap.rb @@ -609,7 +609,7 @@ def open # Net::LDAP::SearchScope_WholeSubtree. Default is WholeSubtree.) # * :size (an integer indicating the maximum number of search entries to # return. Default is zero, which signifies no limit.) - # * :time (an integer restricting the maximum time in seconds allowed for a search RFC 4511 4.5.1.5) + # * :time (an integer restricting the maximum time in seconds allowed for a search. Default is zero, no time limit RFC 4511 4.5.1.5) # * :deref (one of: Net::LDAP::DerefAliases_Never, Net::LDAP::DerefAliases_Search, # Net::LDAP::DerefAliases_Find, Net::LDAP::DerefAliases_Always. Default is Never.) # From f1e208cdb6d3fbc00a1181391a18ad3e334eb4dc Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Fri, 17 Oct 2014 11:41:07 -0700 Subject: [PATCH 04/14] test search timeout parameter @mtodd is this a stupid test? The logic in Connection#search handles both writing the request and reading the response, making it really difficult to stub out. --- test/integration/test_search.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/integration/test_search.rb b/test/integration/test_search.rb index 77eea8c4..cff4cb89 100644 --- a/test/integration/test_search.rb +++ b/test/integration/test_search.rb @@ -24,4 +24,13 @@ def test_search_without_result assert result refute_equal entries, result end + + def test_search_timeout + events = @service.subscribe "search.net_ldap_connection" + + @ldap.search(:timeout => 1) + + payload, result = events.pop + assert_equal 1, payload[:timelimit] + end end From 4597aadc0856755a19e1fff52287ce855a07afed Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Fri, 17 Oct 2014 11:45:13 -0700 Subject: [PATCH 05/14] fix whitespace --- lib/net/ldap/connection.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/net/ldap/connection.rb b/lib/net/ldap/connection.rb index c7150c21..a0d90a21 100644 --- a/lib/net/ldap/connection.rb +++ b/lib/net/ldap/connection.rb @@ -329,9 +329,8 @@ def search(args = {}) sort_control = encode_sort_controls(args.fetch(:sort_controls){ false }) - deref = args[:deref] || Net::LDAP::DerefAliases_Never - raise Net::LDAP::LdapError.new( "invalid alias dereferencing value" ) unless Net::LDAP::DerefAliasesArray.include?(deref) - + deref = args[:deref] || Net::LDAP::DerefAliases_Never + raise Net::LDAP::LdapError.new( "invalid alias dereferencing value" ) unless Net::LDAP::DerefAliasesArray.include?(deref) # An interesting value for the size limit would be close to A/D's # built-in page limit of 1000 records, but openLDAP newer than version From b0828d49d391cfa5dd01135b40dab3c999a9acae Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Tue, 21 Oct 2014 11:12:47 -0700 Subject: [PATCH 06/14] change search instrumentation field s/limit/size/ matches up with how `time` param works. @mtodd you okay with this? --- lib/net/ldap/connection.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/net/ldap/connection.rb b/lib/net/ldap/connection.rb index b66545dc..538c3f4a 100644 --- a/lib/net/ldap/connection.rb +++ b/lib/net/ldap/connection.rb @@ -381,7 +381,7 @@ def search(args = nil) filter: filter, base: base, scope: scope, - limit: size, + size: size, time: time, sort: sort, referrals: refs, From f8520845586212ac90234694fad7d4be22dcc58c Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Tue, 21 Oct 2014 11:15:03 -0700 Subject: [PATCH 07/14] missed a spot during merge --- lib/net/ldap/connection.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/net/ldap/connection.rb b/lib/net/ldap/connection.rb index 538c3f4a..e0ec33c7 100644 --- a/lib/net/ldap/connection.rb +++ b/lib/net/ldap/connection.rb @@ -404,7 +404,7 @@ def search(args = nil) scope.to_ber_enumerated, deref.to_ber_enumerated, query_limit.to_ber, # size limit - timelimit.to_ber, + time.to_ber, attrs_only.to_ber, filter.to_ber, ber_attrs.to_ber_sequence From 8c111230e106b92f01e288ad7284c59732c4004e Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Tue, 21 Oct 2014 11:15:44 -0700 Subject: [PATCH 08/14] rename timelimit to time --- test/integration/test_search.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/test_search.rb b/test/integration/test_search.rb index cff4cb89..5d571dc2 100644 --- a/test/integration/test_search.rb +++ b/test/integration/test_search.rb @@ -31,6 +31,6 @@ def test_search_timeout @ldap.search(:timeout => 1) payload, result = events.pop - assert_equal 1, payload[:timelimit] + assert_equal 1, payload[:time] end end From 6842f331bb8c8f2074075aef521318a9563b21c3 Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Tue, 21 Oct 2014 11:18:01 -0700 Subject: [PATCH 09/14] parameter is named time --- test/integration/test_search.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/test_search.rb b/test/integration/test_search.rb index 5d571dc2..3a13120a 100644 --- a/test/integration/test_search.rb +++ b/test/integration/test_search.rb @@ -28,7 +28,7 @@ def test_search_without_result def test_search_timeout events = @service.subscribe "search.net_ldap_connection" - @ldap.search(:timeout => 1) + @ldap.search(:time => 5) payload, result = events.pop assert_equal 1, payload[:time] From e5e47a449e0fcb23f33f855c8896cce3d48b83ab Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Tue, 21 Oct 2014 14:38:05 -0700 Subject: [PATCH 10/14] add base to search --- test/integration/test_search.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/test_search.rb b/test/integration/test_search.rb index 3a13120a..92174233 100644 --- a/test/integration/test_search.rb +++ b/test/integration/test_search.rb @@ -28,7 +28,7 @@ def test_search_without_result def test_search_timeout events = @service.subscribe "search.net_ldap_connection" - @ldap.search(:time => 5) + @ldap.search(base: "dc=rubyldap,dc=com", time: 5) payload, result = events.pop assert_equal 1, payload[:time] From 4358f9ceb9b488031b21bef287ecf597932dd922 Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Tue, 21 Oct 2014 19:04:18 -0700 Subject: [PATCH 11/14] failing test for time limit search --- test/integration/test_search.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/integration/test_search.rb b/test/integration/test_search.rb index 119ac6d9..079e1c90 100644 --- a/test/integration/test_search.rb +++ b/test/integration/test_search.rb @@ -26,9 +26,13 @@ def test_search_without_result end def test_search_timeout + entries = [] events = @service.subscribe "search.net_ldap_connection" - result = @ldap.search(base: "dc=rubyldap,dc=com", time: 5) + result = @ldap.search(base: "dc=rubyldap,dc=com", time: 5) do |entry| + assert_kind_of Net::LDAP::Entry, entry + entries << entry + end payload, result = events.pop assert_equal 5, payload[:time] From 17d3201e4b834bca23b1f31ad4a8e61ca183f65e Mon Sep 17 00:00:00 2001 From: Jerry Cheung Date: Tue, 21 Oct 2014 19:10:05 -0700 Subject: [PATCH 12/14] return partial results when exceeding search time limit --- lib/net/ldap.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/net/ldap.rb b/lib/net/ldap.rb index 2ad6e3a3..f19fd837 100644 --- a/lib/net/ldap.rb +++ b/lib/net/ldap.rb @@ -684,8 +684,8 @@ def search(args = {}) when ResultStrings.key("Success") # everything good result_set - when ResultStrings.key("Size Limit Exceeded") - # LDAP: Size limit exceeded + when ResultStrings.key("Size Limit Exceeded"), ResultStrings.key("Time Limit Exceeded") + # LDAP: Size/Time limit exceeded # This happens when we use size option and results are truncated # Still we need to return user results result_set From a460d4a4251df4a255842a1981a1a4f4f2898416 Mon Sep 17 00:00:00 2001 From: Matt Todd Date: Tue, 21 Oct 2014 19:36:47 -0700 Subject: [PATCH 13/14] Discard unneeded event data Name conflicted with real test data --- test/integration/test_search.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/test_search.rb b/test/integration/test_search.rb index 079e1c90..919cdfbc 100644 --- a/test/integration/test_search.rb +++ b/test/integration/test_search.rb @@ -34,7 +34,7 @@ def test_search_timeout entries << entry end - payload, result = events.pop + payload, _ = events.pop assert_equal 5, payload[:time] assert_equal entries, result end From 69c7593a9262937025aacad90200d5eb6fbc9a79 Mon Sep 17 00:00:00 2001 From: Matt Todd Date: Tue, 21 Oct 2014 20:13:12 -0700 Subject: [PATCH 14/14] Assert search returns a truthy value --- test/integration/test_return_codes.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/test_return_codes.rb b/test/integration/test_return_codes.rb index d3a6758b..df93ddf0 100644 --- a/test/integration/test_return_codes.rb +++ b/test/integration/test_return_codes.rb @@ -21,7 +21,7 @@ def test_protocol_error end def test_time_limit_exceeded - refute @ldap.search(filter: "cn=timeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com") + assert @ldap.search(filter: "cn=timeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com") assert result = @ldap.get_operation_result assert_equal 3, result.code @@ -29,7 +29,7 @@ def test_time_limit_exceeded end def test_size_limit_exceeded - @ldap.search(filter: "cn=sizeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com") + assert @ldap.search(filter: "cn=sizeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com") assert result = @ldap.get_operation_result assert_equal 4, result.code pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy