@@ -86,7 +86,7 @@ def setup_encryption(args)
86
86
# go here.
87
87
when :start_tls
88
88
request = [ Net ::LDAP ::StartTlsOid . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( Net ::LDAP ::PDU ::ExtendedRequest )
89
- write_request ( request )
89
+ write ( request )
90
90
be = read
91
91
raise Net ::LDAP ::LdapError , "no start_tls result" if be . nil?
92
92
pdu = Net ::LDAP ::PDU . new ( be )
@@ -126,26 +126,22 @@ def read(syntax = Net::LDAP::AsnSyntax)
126
126
end
127
127
private :read
128
128
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.
130
131
#
131
- # - packet: the BER data packet to write on the socket.
132
+ # - request: required BER formatted request
133
+ # - controls: optional BER formatted controls
132
134
#
133
135
# Returns the return value from writing to the connection, which in some
134
136
# cases is the Integer number of bytes written to the socket.
135
- def write ( packet )
137
+ def write ( request , controls = nil )
136
138
instrument "write.net_ldap_connection" do |payload |
139
+ packet = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
137
140
payload [ :content_length ] = @conn . write ( packet )
138
141
end
139
142
end
140
143
private :write
141
144
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
-
149
145
def next_msgid
150
146
@msgid ||= 0
151
147
@msgid += 1
@@ -181,7 +177,7 @@ def bind_simple(auth)
181
177
182
178
request = [ LdapVersion . to_ber , user . to_ber ,
183
179
psw . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( 0 )
184
- write_request ( request )
180
+ write ( request )
185
181
186
182
( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
187
183
@@ -218,7 +214,7 @@ def bind_sasl(auth)
218
214
loop {
219
215
sasl = [ mech . to_ber , cred . to_ber ] . to_ber_contextspecific ( 3 )
220
216
request = [ LdapVersion . to_ber , "" . to_ber , sasl ] . to_ber_appsequence ( 0 )
221
- write_request ( request )
217
+ write ( request )
222
218
223
219
( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
224
220
return pdu unless pdu . result_code == 14 # saslBindInProgress
@@ -392,7 +388,7 @@ def search(args = {})
392
388
controls << sort_control if sort_control
393
389
controls = controls . empty? ? nil : controls . to_ber_contextspecific ( 0 )
394
390
395
- write_request ( request , controls )
391
+ write ( request , controls )
396
392
397
393
result_pdu = nil
398
394
controls = [ ]
@@ -500,7 +496,7 @@ def modify(args)
500
496
ops = self . class . modify_ops args [ :operations ]
501
497
request = [ modify_dn . to_ber ,
502
498
ops . to_ber_sequence ] . to_ber_appsequence ( 6 )
503
- write_request ( request )
499
+ write ( request )
504
500
505
501
( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
506
502
@@ -522,7 +518,7 @@ def add(args)
522
518
}
523
519
524
520
request = [ add_dn . to_ber , add_attrs . to_ber_sequence ] . to_ber_appsequence ( 8 )
525
- write_request ( request )
521
+ write ( request )
526
522
527
523
( be = read ) &&
528
524
( pdu = Net ::LDAP ::PDU . new ( be ) ) &&
@@ -544,7 +540,7 @@ def rename(args)
544
540
request = [ old_dn . to_ber , new_rdn . to_ber , delete_attrs . to_ber ]
545
541
request << new_superior . to_ber_contextspecific ( 0 ) unless new_superior == nil
546
542
547
- write_request ( request . to_ber_appsequence ( 12 ) )
543
+ write ( request . to_ber_appsequence ( 12 ) )
548
544
549
545
( be = read ) &&
550
546
( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyRDNResponse ) or
@@ -560,7 +556,7 @@ def delete(args)
560
556
dn = args [ :dn ] or raise "Unable to delete empty DN"
561
557
controls = args . include? ( :control_codes ) ? args [ :control_codes ] . to_ber_control : nil #use nil so we can compact later
562
558
request = dn . to_s . to_ber_application_string ( 10 )
563
- write_request ( request , controls )
559
+ write ( request , controls )
564
560
565
561
( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::DeleteResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
566
562
0 commit comments