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)
276276 auth [ :challenge_response ]
277277 raise Net ::LDAP ::LdapError , "Invalid binding information" unless ( mech && cred && chall )
278278
279+ message_id = next_msgid
280+
279281 n = 0
280282 loop {
281283 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 )
284290
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
287294
288295 return pdu unless pdu . result_code == Net ::LDAP ::ResultCodeSaslBindInProgress
289296 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
231231 assert result . success?
232232 assert_equal 2 , result . message_id
233233 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
234256end
235257
236258class TestLDAPConnectionErrors < Test ::Unit ::TestCase
You can’t perform that action at this time.
0 commit comments