Skip to content

Commit 4132f28

Browse files
committed
Use queued_read for rename operation
1 parent 04bad5f commit 4132f28

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

lib/net/ldap/connection.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -636,12 +636,12 @@ def rename(args)
636636
delete_attrs = args[:delete_attributes] ? true : false
637637
new_superior = args[:new_superior]
638638

639-
request = [old_dn.to_ber, new_rdn.to_ber, delete_attrs.to_ber]
640-
request << new_superior.to_ber_contextspecific(0) unless new_superior == nil
641-
642-
write(request.to_ber_appsequence(Net::LDAP::PDU::ModifyRDNRequest))
639+
message_id = next_msgid
640+
request = [old_dn.to_ber, new_rdn.to_ber, delete_attrs.to_ber]
641+
request << new_superior.to_ber_contextspecific(0) unless new_superior == nil
643642

644-
pdu = read
643+
write(request.to_ber_appsequence(Net::LDAP::PDU::ModifyRDNRequest), nil, message_id)
644+
pdu = queued_read(message_id)
645645

646646
if !pdu || pdu.app_tag != Net::LDAP::PDU::ModifyRDNResponse
647647
raise Net::LDAP::LdapError.new "response missing or invalid"

test/test_ldap_connection.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,27 @@ def test_queued_read_add
152152
assert result.success?
153153
assert_equal 2, result.message_id
154154
end
155+
156+
def test_queued_read_rename
157+
result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
158+
result2 = make_message(2, app_tag: Net::LDAP::PDU::ModifyRDNResponse)
159+
160+
mock = flexmock("socket")
161+
mock.should_receive(:read_ber).
162+
and_return(result1).
163+
and_return(result2)
164+
mock.should_receive(:write)
165+
conn = Net::LDAP::Connection.new(:socket => mock)
166+
167+
conn.next_msgid # simulates ongoing query
168+
169+
assert result = conn.rename(
170+
olddn: "uid=renamable-user1,ou=People,dc=rubyldap,dc=com",
171+
newrdn: "uid=renamed-user1"
172+
)
173+
assert result.success?
174+
assert_equal 2, result.message_id
175+
end
155176
end
156177

157178
class TestLDAPConnectionErrors < Test::Unit::TestCase

0 commit comments

Comments
 (0)