@@ -10,7 +10,7 @@ def initialize(server)
1010 @instrumentation_service = server [ :instrumentation_service ]
1111
1212 begin
13- @conn = TCPSocket . new ( server [ :host ] , server [ :port ] )
13+ @conn = server [ :socket ] || TCPSocket . new ( server [ :host ] , server [ :port ] )
1414 rescue SocketError
1515 raise Net ::LDAP ::LdapError , "No such address or other socket error."
1616 rescue Errno ::ECONNREFUSED
@@ -87,10 +87,8 @@ def setup_encryption(args)
8787 # additional branches requiring server validation and peer certs, etc.
8888 # go here.
8989 when :start_tls
90- msgid = next_msgid . to_ber
9190 request = [ Net ::LDAP ::StartTlsOid . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( Net ::LDAP ::PDU ::ExtendedRequest )
92- request_pkt = [ msgid , request ] . to_ber_sequence
93- write request_pkt
91+ write ( request )
9492 pdu = read
9593 raise Net ::LDAP ::LdapError , "no start_tls result" if pdu . nil?
9694 if pdu . result_code . zero?
@@ -140,14 +138,17 @@ def read(syntax = Net::LDAP::AsnSyntax)
140138 end
141139 private :read
142140
143- # Internal: Writes the given packet to the configured connection.
141+ # Internal: Write a BER formatted packet with the next message id to the
142+ # configured connection.
144143 #
145- # - packet: the BER data packet to write on the socket.
144+ # - request: required BER formatted request
145+ # - controls: optional BER formatted controls
146146 #
147147 # Returns the return value from writing to the connection, which in some
148148 # cases is the Integer number of bytes written to the socket.
149- def write ( packet )
149+ def write ( request , controls = nil )
150150 instrument "write.net_ldap_connection" do |payload |
151+ packet = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
151152 payload [ :content_length ] = @conn . write ( packet )
152153 end
153154 end
@@ -186,11 +187,9 @@ def bind_simple(auth)
186187
187188 raise Net ::LDAP ::LdapError , "Invalid binding information" unless ( user && psw )
188189
189- msgid = next_msgid . to_ber
190190 request = [ LdapVersion . to_ber , user . to_ber ,
191191 psw . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( 0 )
192- request_pkt = [ msgid , request ] . to_ber_sequence
193- write request_pkt
192+ write ( request )
194193
195194 pdu = read
196195 raise Net ::LDAP ::LdapError , "no bind result" unless pdu
@@ -226,11 +225,9 @@ def bind_sasl(auth)
226225
227226 n = 0
228227 loop {
229- msgid = next_msgid . to_ber
230228 sasl = [ mech . to_ber , cred . to_ber ] . to_ber_contextspecific ( 3 )
231229 request = [ LdapVersion . to_ber , "" . to_ber , sasl ] . to_ber_appsequence ( 0 )
232- request_pkt = [ msgid , request ] . to_ber_sequence
233- write request_pkt
230+ write ( request )
234231
235232 pdu = read
236233 raise Net ::LDAP ::LdapError , "no bind result" unless pdu
@@ -406,8 +403,7 @@ def search(args = {})
406403 controls << sort_control if sort_control
407404 controls = controls . empty? ? nil : controls . to_ber_contextspecific ( 0 )
408405
409- pkt = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
410- write pkt
406+ write ( request , controls )
411407
412408 result_pdu = nil
413409 controls = [ ]
@@ -515,8 +511,7 @@ def modify(args)
515511 ops = self . class . modify_ops args [ :operations ]
516512 request = [ modify_dn . to_ber ,
517513 ops . to_ber_sequence ] . to_ber_appsequence ( 6 )
518- pkt = [ next_msgid . to_ber , request ] . to_ber_sequence
519- write pkt
514+ write ( request )
520515
521516 pdu = read
522517
@@ -542,8 +537,7 @@ def add(args)
542537 }
543538
544539 request = [ add_dn . to_ber , add_attrs . to_ber_sequence ] . to_ber_appsequence ( 8 )
545- pkt = [ next_msgid . to_ber , request ] . to_ber_sequence
546- write pkt
540+ write ( request )
547541
548542 pdu = read
549543
@@ -566,8 +560,7 @@ def rename(args)
566560 request = [ old_dn . to_ber , new_rdn . to_ber , delete_attrs . to_ber ]
567561 request << new_superior . to_ber_contextspecific ( 0 ) unless new_superior == nil
568562
569- pkt = [ next_msgid . to_ber , request . to_ber_appsequence ( 12 ) ] . to_ber_sequence
570- write pkt
563+ write ( request . to_ber_appsequence ( 12 ) )
571564
572565 pdu = read
573566
@@ -585,8 +578,7 @@ def delete(args)
585578 dn = args [ :dn ] or raise "Unable to delete empty DN"
586579 controls = args . include? ( :control_codes ) ? args [ :control_codes ] . to_ber_control : nil #use nil so we can compact later
587580 request = dn . to_s . to_ber_application_string ( 10 )
588- pkt = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
589- write pkt
581+ write ( request , controls )
590582
591583 pdu = read
592584
0 commit comments