@@ -501,4 +501,43 @@ def test_search_net_ldap_connection_event
501
501
# ensure no unread
502
502
assert unread . empty? , "should not have any leftover unread messages"
503
503
end
504
+
505
+ def test_search_with_controls
506
+ # search data
507
+ search_data_ber = Net ::BER ::BerIdentifiedArray . new ( [ 1 , [
508
+ "uid=user1,ou=People,dc=rubyldap,dc=com" ,
509
+ [ [ "uid" , [ "user1" ] ] ] ,
510
+ ] ] )
511
+ search_data_ber . ber_identifier = Net ::LDAP ::PDU ::SearchReturnedData
512
+ search_data = [ 1 , search_data_ber ]
513
+ # search result (end of results)
514
+ search_result_ber = Net ::BER ::BerIdentifiedArray . new ( [ Net ::LDAP ::ResultCodeSuccess , "" , "" ] )
515
+ search_result_ber . ber_identifier = Net ::LDAP ::PDU ::SearchResult
516
+ search_result = [ 1 , search_result_ber ]
517
+ @tcp_socket . should_receive ( :read_ber ) . and_return ( search_data )
518
+ . and_return ( search_result )
519
+
520
+ events = @service . subscribe "search.net_ldap_connection"
521
+ unread = @service . subscribe "search_messages_unread.net_ldap_connection"
522
+
523
+ all_but_sacl_flag = 0x1 | 0x2 | 0x4 # OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION
524
+ control_values = [ all_but_sacl_flag ] . map ( &:to_ber ) . to_ber_sequence . to_s . to_ber
525
+ controls = [ ]
526
+ # LDAP_SERVER_SD_FLAGS constant definition, taken from https://ldapwiki.com/wiki/LDAP_SERVER_SD_FLAGS_OID
527
+ ldap_server_sd_flags = '1.2.840.113556.1.4.801' . freeze
528
+ controls << [ ldap_server_sd_flags . to_ber , true . to_ber , control_values ] . to_ber_sequence
529
+
530
+ result = @connection . search ( filter : "(uid=user1)" , base : "ou=People,dc=rubyldap,dc=com" , controls : controls )
531
+ assert result . success? , "should be success"
532
+
533
+ # a search event
534
+ payload , result = events . pop
535
+ assert payload . key? ( :result )
536
+ assert payload . key? ( :filter )
537
+ assert_equal "(uid=user1)" , payload [ :filter ] . to_s
538
+ assert result
539
+
540
+ # ensure no unread
541
+ assert unread . empty? , "should not have any leftover unread messages"
542
+ end
504
543
end
0 commit comments