@@ -10,7 +10,7 @@ def initialize(server)
10
10
@instrumentation_service = server [ :instrumentation_service ]
11
11
12
12
begin
13
- @conn = TCPSocket . new ( server [ :host ] , server [ :port ] )
13
+ @conn = server [ :socket ] || TCPSocket . new ( server [ :host ] , server [ :port ] )
14
14
rescue SocketError
15
15
raise Net ::LDAP ::LdapError , "No such address or other socket error."
16
16
rescue Errno ::ECONNREFUSED
@@ -87,10 +87,8 @@ def setup_encryption(args)
87
87
# additional branches requiring server validation and peer certs, etc.
88
88
# go here.
89
89
when :start_tls
90
- msgid = next_msgid . to_ber
91
90
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 )
94
92
be = read
95
93
raise Net ::LDAP ::LdapError , "no start_tls result" if be . nil?
96
94
pdu = Net ::LDAP ::PDU . new ( be )
@@ -130,14 +128,17 @@ def read(syntax = Net::LDAP::AsnSyntax)
130
128
end
131
129
private :read
132
130
133
- # Internal: Writes the given packet to the configured connection.
131
+ # Internal: Write a BER formatted packet with the next message id to the
132
+ # configured connection.
134
133
#
135
- # - packet: the BER data packet to write on the socket.
134
+ # - request: required BER formatted request
135
+ # - controls: optional BER formatted controls
136
136
#
137
137
# Returns the return value from writing to the connection, which in some
138
138
# cases is the Integer number of bytes written to the socket.
139
- def write ( packet )
139
+ def write ( request , controls = nil )
140
140
instrument "write.net_ldap_connection" do |payload |
141
+ packet = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
141
142
payload [ :content_length ] = @conn . write ( packet )
142
143
end
143
144
end
@@ -176,11 +177,9 @@ def bind_simple(auth)
176
177
177
178
raise Net ::LDAP ::LdapError , "Invalid binding information" unless ( user && psw )
178
179
179
- msgid = next_msgid . to_ber
180
180
request = [ LdapVersion . to_ber , user . to_ber ,
181
181
psw . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( 0 )
182
- request_pkt = [ msgid , request ] . to_ber_sequence
183
- write request_pkt
182
+ write ( request )
184
183
185
184
( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
186
185
@@ -215,11 +214,9 @@ def bind_sasl(auth)
215
214
216
215
n = 0
217
216
loop {
218
- msgid = next_msgid . to_ber
219
217
sasl = [ mech . to_ber , cred . to_ber ] . to_ber_contextspecific ( 3 )
220
218
request = [ LdapVersion . to_ber , "" . to_ber , sasl ] . to_ber_appsequence ( 0 )
221
- request_pkt = [ msgid , request ] . to_ber_sequence
222
- write request_pkt
219
+ write ( request )
223
220
224
221
( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
225
222
return pdu unless pdu . result_code == 14 # saslBindInProgress
@@ -393,8 +390,7 @@ def search(args = {})
393
390
controls << sort_control if sort_control
394
391
controls = controls . empty? ? nil : controls . to_ber_contextspecific ( 0 )
395
392
396
- pkt = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
397
- write pkt
393
+ write ( request , controls )
398
394
399
395
result_pdu = nil
400
396
controls = [ ]
@@ -502,8 +498,7 @@ def modify(args)
502
498
ops = self . class . modify_ops args [ :operations ]
503
499
request = [ modify_dn . to_ber ,
504
500
ops . to_ber_sequence ] . to_ber_appsequence ( 6 )
505
- pkt = [ next_msgid . to_ber , request ] . to_ber_sequence
506
- write pkt
501
+ write ( request )
507
502
508
503
( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
509
504
@@ -525,8 +520,7 @@ def add(args)
525
520
}
526
521
527
522
request = [ add_dn . to_ber , add_attrs . to_ber_sequence ] . to_ber_appsequence ( 8 )
528
- pkt = [ next_msgid . to_ber , request ] . to_ber_sequence
529
- write pkt
523
+ write ( request )
530
524
531
525
( be = read ) &&
532
526
( pdu = Net ::LDAP ::PDU . new ( be ) ) &&
@@ -548,8 +542,7 @@ def rename(args)
548
542
request = [ old_dn . to_ber , new_rdn . to_ber , delete_attrs . to_ber ]
549
543
request << new_superior . to_ber_contextspecific ( 0 ) unless new_superior == nil
550
544
551
- pkt = [ next_msgid . to_ber , request . to_ber_appsequence ( 12 ) ] . to_ber_sequence
552
- write pkt
545
+ write ( request . to_ber_appsequence ( 12 ) )
553
546
554
547
( be = read ) &&
555
548
( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyRDNResponse ) or
@@ -565,8 +558,7 @@ def delete(args)
565
558
dn = args [ :dn ] or raise "Unable to delete empty DN"
566
559
controls = args . include? ( :control_codes ) ? args [ :control_codes ] . to_ber_control : nil #use nil so we can compact later
567
560
request = dn . to_s . to_ber_application_string ( 10 )
568
- pkt = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
569
- write pkt
561
+ write ( request , controls )
570
562
571
563
( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::DeleteResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
572
564
0 commit comments