Skip to content

Commit d5e6afd

Browse files
committed
lazy init Net::LDAP::Connection's internal sock
1 parent c89d493 commit d5e6afd

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

lib/net/ldap/connection.rb

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,10 @@ class Net::LDAP::Connection #:nodoc:
66
LdapVersion = 3
77
MaxSaslChallenges = 10
88

9-
def initialize(server)
9+
def initialize(server = {})
10+
@server = server
1011
@instrumentation_service = server[:instrumentation_service]
1112

12-
if server[:socket]
13-
prepare_socket(server)
14-
else
15-
server[:hosts] = [[server[:host], server[:port]]] if server[:hosts].nil?
16-
open_connection(server)
17-
end
18-
1913
yield self if block_given?
2014
end
2115

@@ -195,7 +189,7 @@ def message_queue
195189
def read(syntax = Net::LDAP::AsnSyntax)
196190
ber_object =
197191
instrument "read.net_ldap_connection", :syntax => syntax do |payload|
198-
@conn.read_ber(syntax) do |id, content_length|
192+
socket.read_ber(syntax) do |id, content_length|
199193
payload[:object_type_id] = id
200194
payload[:content_length] = content_length
201195
end
@@ -225,7 +219,7 @@ def read(syntax = Net::LDAP::AsnSyntax)
225219
def write(request, controls = nil, message_id = next_msgid)
226220
instrument "write.net_ldap_connection" do |payload|
227221
packet = [message_id.to_ber, request, controls].compact.to_ber_sequence
228-
payload[:content_length] = @conn.write(packet)
222+
payload[:content_length] = socket.write(packet)
229223
end
230224
end
231225
private :write
@@ -600,4 +594,18 @@ def delete(args)
600594

601595
pdu
602596
end
597+
598+
private
599+
600+
# Returns a Socket like object used internally to communicate with LDAP server
601+
#
602+
# Typically a TCPSocket, but can be a OpenSSL::SSL::SSLSocket
603+
def socket
604+
return @conn if defined? @conn
605+
606+
# First refactoring uses the existing methods open_connection and
607+
# prepare_socket to set @conn. Next cleanup would centralize connection
608+
# handling here.
609+
open_connection(@server)
610+
end
603611
end # class Connection

0 commit comments

Comments
 (0)