@@ -86,7 +86,7 @@ def setup_encryption(args)
8686 # go here.
8787 when :start_tls
8888 request = [ Net ::LDAP ::StartTlsOid . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( Net ::LDAP ::PDU ::ExtendedRequest )
89- write_request ( request )
89+ write ( request )
9090 be = read
9191 raise Net ::LDAP ::LdapError , "no start_tls result" if be . nil?
9292 pdu = Net ::LDAP ::PDU . new ( be )
@@ -126,26 +126,22 @@ def read(syntax = Net::LDAP::AsnSyntax)
126126 end
127127 private :read
128128
129- # Internal: Writes the given packet to the configured connection.
129+ # Internal: Write a BER formatted packet with the next message id to the
130+ # configured connection.
130131 #
131- # - packet: the BER data packet to write on the socket.
132+ # - request: required BER formatted request
133+ # - controls: optional BER formatted controls
132134 #
133135 # Returns the return value from writing to the connection, which in some
134136 # cases is the Integer number of bytes written to the socket.
135- def write ( packet )
137+ def write ( request , controls = nil )
136138 instrument "write.net_ldap_connection" do |payload |
139+ packet = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
137140 payload [ :content_length ] = @conn . write ( packet )
138141 end
139142 end
140143 private :write
141144
142- # Internal: Convert BER formatted `request` and `controls` to a BER data
143- # packet with the next message id (`#next_msgid`) and call `#write` on it.
144- def write_request ( request , controls = nil )
145- write ( [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence )
146- end
147- private :write_request
148-
149145 def next_msgid
150146 @msgid ||= 0
151147 @msgid += 1
@@ -181,7 +177,7 @@ def bind_simple(auth)
181177
182178 request = [ LdapVersion . to_ber , user . to_ber ,
183179 psw . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( 0 )
184- write_request ( request )
180+ write ( request )
185181
186182 ( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
187183
@@ -218,7 +214,7 @@ def bind_sasl(auth)
218214 loop {
219215 sasl = [ mech . to_ber , cred . to_ber ] . to_ber_contextspecific ( 3 )
220216 request = [ LdapVersion . to_ber , "" . to_ber , sasl ] . to_ber_appsequence ( 0 )
221- write_request ( request )
217+ write ( request )
222218
223219 ( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
224220 return pdu unless pdu . result_code == 14 # saslBindInProgress
@@ -392,7 +388,7 @@ def search(args = {})
392388 controls << sort_control if sort_control
393389 controls = controls . empty? ? nil : controls . to_ber_contextspecific ( 0 )
394390
395- write_request ( request , controls )
391+ write ( request , controls )
396392
397393 result_pdu = nil
398394 controls = [ ]
@@ -500,7 +496,7 @@ def modify(args)
500496 ops = self . class . modify_ops args [ :operations ]
501497 request = [ modify_dn . to_ber ,
502498 ops . to_ber_sequence ] . to_ber_appsequence ( 6 )
503- write_request ( request )
499+ write ( request )
504500
505501 ( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
506502
@@ -522,7 +518,7 @@ def add(args)
522518 }
523519
524520 request = [ add_dn . to_ber , add_attrs . to_ber_sequence ] . to_ber_appsequence ( 8 )
525- write_request ( request )
521+ write ( request )
526522
527523 ( be = read ) &&
528524 ( pdu = Net ::LDAP ::PDU . new ( be ) ) &&
@@ -544,7 +540,7 @@ def rename(args)
544540 request = [ old_dn . to_ber , new_rdn . to_ber , delete_attrs . to_ber ]
545541 request << new_superior . to_ber_contextspecific ( 0 ) unless new_superior == nil
546542
547- write_request ( request . to_ber_appsequence ( 12 ) )
543+ write ( request . to_ber_appsequence ( 12 ) )
548544
549545 ( be = read ) &&
550546 ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyRDNResponse ) or
@@ -560,7 +556,7 @@ def delete(args)
560556 dn = args [ :dn ] or raise "Unable to delete empty DN"
561557 controls = args . include? ( :control_codes ) ? args [ :control_codes ] . to_ber_control : nil #use nil so we can compact later
562558 request = dn . to_s . to_ber_application_string ( 10 )
563- write_request ( request , controls )
559+ write ( request , controls )
564560
565561 ( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::DeleteResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
566562
0 commit comments