Skip to content

Commit 853aeaa

Browse files
committed
Merge pull request ruby-ldap#140 from randx/fix-size-option-in-search
Fix size option for ldap.search method
2 parents b231067 + e5a2077 commit 853aeaa

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
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 ResultStrings.key("Success")
684+
# everything good
685+
result_set
686+
when ResultStrings.key("Size Limit Exceeded")
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/integration/test_return_codes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def test_time_limit_exceeded
2929
end
3030

3131
def test_size_limit_exceeded
32-
refute @ldap.search(filter: "cn=sizeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com")
32+
@ldap.search(filter: "cn=sizeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com")
3333
assert result = @ldap.get_operation_result
3434

3535
assert_equal 4, result.code

test/integration/test_search.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,16 @@ def test_search_without_result
2424
assert result
2525
refute_equal entries, result
2626
end
27+
28+
def test_search_with_size
29+
entries = []
30+
31+
result = @ldap.search(filter: "(uid=user1)", base: "dc=rubyldap,dc=com", size: 1) do |entry|
32+
assert_kind_of Net::LDAP::Entry, entry
33+
entries << entry
34+
end
35+
36+
refute entries.empty?
37+
assert_equal entries, result
38+
end
2739
end

test/test_ldap.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,21 @@ 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+
assert_equal result.size, payload[:size]
59+
end
4360
end

0 commit comments

Comments
 (0)