File tree Expand file tree Collapse file tree 2 files changed +33
-4
lines changed Expand file tree Collapse file tree 2 files changed +33
-4
lines changed Original file line number Diff line number Diff line change @@ -276,14 +276,21 @@ def bind_sasl(auth)
276
276
auth [ :challenge_response ]
277
277
raise Net ::LDAP ::LdapError , "Invalid binding information" unless ( mech && cred && chall )
278
278
279
+ message_id = next_msgid
280
+
279
281
n = 0
280
282
loop {
281
283
sasl = [ mech . to_ber , cred . to_ber ] . to_ber_contextspecific ( 3 )
282
- request = [ LdapVersion . to_ber , "" . to_ber , sasl ] . to_ber_appsequence ( Net ::LDAP ::PDU ::BindRequest )
283
- write ( request )
284
+ request = [
285
+ LdapVersion . to_ber , "" . to_ber , sasl
286
+ ] . to_ber_appsequence ( Net ::LDAP ::PDU ::BindRequest )
287
+
288
+ write ( request , nil , message_id )
289
+ pdu = queued_read ( message_id )
284
290
285
- pdu = read
286
- raise Net ::LDAP ::LdapError , "no bind result" unless pdu
291
+ if !pdu || pdu . app_tag != Net ::LDAP ::PDU ::BindResult
292
+ raise Net ::LDAP ::LdapError , "no bind result"
293
+ end
287
294
288
295
return pdu unless pdu . result_code == Net ::LDAP ::ResultCodeSaslBindInProgress
289
296
raise Net ::LDAP ::LdapError , "sasl-challenge overflow" if ( ( n += 1 ) > MaxSaslChallenges )
Original file line number Diff line number Diff line change @@ -231,6 +231,28 @@ def test_queued_read_bind_simple
231
231
assert result . success?
232
232
assert_equal 2 , result . message_id
233
233
end
234
+
235
+ def test_queued_read_bind_sasl
236
+ result1 = make_message ( 1 , app_tag : Net ::LDAP ::PDU ::SearchResult )
237
+ result2 = make_message ( 2 , app_tag : Net ::LDAP ::PDU ::BindResult )
238
+
239
+ mock = flexmock ( "socket" )
240
+ mock . should_receive ( :read_ber ) .
241
+ and_return ( result1 ) .
242
+ and_return ( result2 )
243
+ mock . should_receive ( :write )
244
+ conn = Net ::LDAP ::Connection . new ( :socket => mock )
245
+
246
+ conn . next_msgid # simulates ongoing query
247
+
248
+ assert result = conn . bind (
249
+ method : :sasl ,
250
+ mechanism : "fake" ,
251
+ initial_credential : "passworD1" ,
252
+ challenge_response : flexmock ( "challenge proc" ) )
253
+ assert result . success?
254
+ assert_equal 2 , result . message_id
255
+ end
234
256
end
235
257
236
258
class TestLDAPConnectionErrors < Test ::Unit ::TestCase
You can’t perform that action at this time.
0 commit comments