File tree Expand file tree Collapse file tree 2 files changed +31
-4
lines changed Expand file tree Collapse file tree 2 files changed +31
-4
lines changed Original file line number Diff line number Diff line change @@ -87,10 +87,18 @@ 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
- request = [ Net ::LDAP ::StartTlsOid . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( Net ::LDAP ::PDU ::ExtendedRequest )
91
- write ( request )
92
- pdu = read
93
- raise Net ::LDAP ::LdapError , "no start_tls result" if pdu . nil?
90
+ message_id = next_msgid
91
+ request = [
92
+ Net ::LDAP ::StartTlsOid . to_ber_contextspecific ( 0 )
93
+ ] . to_ber_appsequence ( Net ::LDAP ::PDU ::ExtendedRequest )
94
+
95
+ write ( request , nil , message_id )
96
+ pdu = queued_read ( message_id )
97
+
98
+ if pdu . nil? || pdu . app_tag != Net ::LDAP ::PDU ::ExtendedResponse
99
+ raise Net ::LDAP ::LdapError , "no start_tls result"
100
+ end
101
+
94
102
if pdu . result_code . zero?
95
103
@conn = self . class . wrap_with_ssl ( @conn )
96
104
else
Original file line number Diff line number Diff line change @@ -191,6 +191,25 @@ def test_queued_read_delete
191
191
assert result . success?
192
192
assert_equal 2 , result . message_id
193
193
end
194
+
195
+ def test_queued_read_setup_encryption_with_start_tls
196
+ result1 = make_message ( 1 , app_tag : Net ::LDAP ::PDU ::SearchResult )
197
+ result2 = make_message ( 2 , app_tag : Net ::LDAP ::PDU ::ExtendedResponse )
198
+
199
+ mock = flexmock ( "socket" )
200
+ mock . should_receive ( :read_ber ) .
201
+ and_return ( result1 ) .
202
+ and_return ( result2 )
203
+ mock . should_receive ( :write )
204
+ conn = Net ::LDAP ::Connection . new ( :socket => mock )
205
+ flexmock ( Net ::LDAP ::Connection ) . should_receive ( :wrap_with_ssl ) . with ( mock ) .
206
+ and_return ( mock )
207
+
208
+ conn . next_msgid # simulates ongoing query
209
+
210
+ assert result = conn . setup_encryption ( method : :start_tls )
211
+ assert_equal mock , result
212
+ end
194
213
end
195
214
196
215
class TestLDAPConnectionErrors < Test ::Unit ::TestCase
You can’t perform that action at this time.
0 commit comments