Skip to content

Commit 2a2bf1a

Browse files
committed
Fix size option for ldap.search method
Signed-off-by: Dmitriy Zaporozhets <[email protected]>
1 parent 0aeceaf commit 2a2bf1a

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/net/ldap.rb

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,18 @@ def search(args = {})
678678
end
679679

680680
if return_result_set
681-
(!@result.nil? && @result.result_code == 0) ? result_set : nil
681+
unless @result.nil?
682+
case @result.result_code
683+
when 0
684+
# everything good
685+
result_set
686+
when 4
687+
# LDAP: Size limit exceeded
688+
# This happens when we use size option and results are truncated
689+
# Still we need to return user results
690+
result_set
691+
end
692+
end
682693
else
683694
@result.success?
684695
end

test/test_ldap.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,20 @@ def test_instrument_search
4040
assert_equal [entry], payload[:result]
4141
assert_equal "(uid=user1)", payload[:filter]
4242
end
43+
44+
def test_instrument_search_with_size
45+
events = @service.subscribe "search.net_ldap"
46+
47+
flexmock(@connection).should_receive(:bind).and_return(flexmock(:bind_result, :result_code => 0))
48+
flexmock(@connection).should_receive(:search).with(Hash, Proc).
49+
yields(entry = Net::LDAP::Entry.new("uid=user1,ou=users,dc=example,dc=com")).
50+
and_return(flexmock(:search_result, :success? => true, :result_code => 4))
51+
52+
refute_nil @subject.search(:filter => "(uid=user1)", :size => 1)
53+
54+
payload, result = events.pop
55+
assert_equal [entry], result
56+
assert_equal [entry], payload[:result]
57+
assert_equal "(uid=user1)", payload[:filter]
58+
end
4359
end

0 commit comments

Comments
 (0)