@@ -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
pdu = read
95
93
raise Net ::LDAP ::LdapError , "no start_tls result" if pdu . nil?
96
94
if pdu . result_code . zero?
@@ -140,14 +138,17 @@ def read(syntax = Net::LDAP::AsnSyntax)
140
138
end
141
139
private :read
142
140
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.
144
143
#
145
- # - packet: the BER data packet to write on the socket.
144
+ # - request: required BER formatted request
145
+ # - controls: optional BER formatted controls
146
146
#
147
147
# Returns the return value from writing to the connection, which in some
148
148
# cases is the Integer number of bytes written to the socket.
149
- def write ( packet )
149
+ def write ( request , controls = nil )
150
150
instrument "write.net_ldap_connection" do |payload |
151
+ packet = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
151
152
payload [ :content_length ] = @conn . write ( packet )
152
153
end
153
154
end
@@ -186,11 +187,9 @@ def bind_simple(auth)
186
187
187
188
raise Net ::LDAP ::LdapError , "Invalid binding information" unless ( user && psw )
188
189
189
- msgid = next_msgid . to_ber
190
190
request = [ LdapVersion . to_ber , user . to_ber ,
191
191
psw . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( 0 )
192
- request_pkt = [ msgid , request ] . to_ber_sequence
193
- write request_pkt
192
+ write ( request )
194
193
195
194
pdu = read
196
195
raise Net ::LDAP ::LdapError , "no bind result" unless pdu
@@ -226,11 +225,9 @@ def bind_sasl(auth)
226
225
227
226
n = 0
228
227
loop {
229
- msgid = next_msgid . to_ber
230
228
sasl = [ mech . to_ber , cred . to_ber ] . to_ber_contextspecific ( 3 )
231
229
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 )
234
231
235
232
pdu = read
236
233
raise Net ::LDAP ::LdapError , "no bind result" unless pdu
@@ -406,8 +403,7 @@ def search(args = {})
406
403
controls << sort_control if sort_control
407
404
controls = controls . empty? ? nil : controls . to_ber_contextspecific ( 0 )
408
405
409
- pkt = [ next_msgid . to_ber , request , controls ] . compact . to_ber_sequence
410
- write pkt
406
+ write ( request , controls )
411
407
412
408
result_pdu = nil
413
409
controls = [ ]
@@ -515,8 +511,7 @@ def modify(args)
515
511
ops = self . class . modify_ops args [ :operations ]
516
512
request = [ modify_dn . to_ber ,
517
513
ops . to_ber_sequence ] . to_ber_appsequence ( 6 )
518
- pkt = [ next_msgid . to_ber , request ] . to_ber_sequence
519
- write pkt
514
+ write ( request )
520
515
521
516
pdu = read
522
517
@@ -542,8 +537,7 @@ def add(args)
542
537
}
543
538
544
539
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 )
547
541
548
542
pdu = read
549
543
@@ -566,8 +560,7 @@ def rename(args)
566
560
request = [ old_dn . to_ber , new_rdn . to_ber , delete_attrs . to_ber ]
567
561
request << new_superior . to_ber_contextspecific ( 0 ) unless new_superior == nil
568
562
569
- pkt = [ next_msgid . to_ber , request . to_ber_appsequence ( 12 ) ] . to_ber_sequence
570
- write pkt
563
+ write ( request . to_ber_appsequence ( 12 ) )
571
564
572
565
pdu = read
573
566
@@ -585,8 +578,7 @@ def delete(args)
585
578
dn = args [ :dn ] or raise "Unable to delete empty DN"
586
579
controls = args . include? ( :control_codes ) ? args [ :control_codes ] . to_ber_control : nil #use nil so we can compact later
587
580
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 )
590
582
591
583
pdu = read
592
584
0 commit comments