net-ldap 0.16.2 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +59 -0
  3. data/README.rdoc +10 -3
  4. data/lib/net/ber/core_ext.rb +6 -6
  5. data/lib/net/ber.rb +2 -2
  6. data/lib/net/ldap/auth_adapter/gss_spnego.rb +2 -2
  7. data/lib/net/ldap/auth_adapter/sasl.rb +1 -1
  8. data/lib/net/ldap/auth_adapter/simple.rb +1 -1
  9. data/lib/net/ldap/connection.rb +22 -14
  10. data/lib/net/ldap/dataset.rb +1 -3
  11. data/lib/net/ldap/dn.rb +19 -27
  12. data/lib/net/ldap/entry.rb +11 -2
  13. data/lib/net/ldap/error.rb +2 -26
  14. data/lib/net/ldap/filter.rb +3 -3
  15. data/lib/net/ldap/instrumentation.rb +2 -2
  16. data/lib/net/ldap/password.rb +7 -5
  17. data/lib/net/ldap/pdu.rb +1 -1
  18. data/lib/net/ldap/version.rb +1 -1
  19. data/lib/net/ldap.rb +41 -16
  20. data/lib/net/snmp.rb +1 -1
  21. data/lib/net-ldap.rb +1 -1
  22. metadata +16 -92
  23. data/.gitignore +0 -10
  24. data/.rubocop.yml +0 -20
  25. data/.rubocop_todo.yml +0 -753
  26. data/.travis.yml +0 -55
  27. data/CONTRIBUTING.md +0 -54
  28. data/Gemfile +0 -2
  29. data/Rakefile +0 -23
  30. data/net-ldap.gemspec +0 -37
  31. data/script/changelog +0 -47
  32. data/script/ldap-docker +0 -12
  33. data/script/package +0 -7
  34. data/script/release +0 -16
  35. data/test/ber/core_ext/test_array.rb +0 -22
  36. data/test/ber/core_ext/test_string.rb +0 -25
  37. data/test/ber/test_ber.rb +0 -153
  38. data/test/fixtures/ca/docker-ca.pem +0 -18
  39. data/test/fixtures/ldif/06-retcode.ldif +0 -75
  40. data/test/fixtures/ldif/50-seed.ldif +0 -374
  41. data/test/integration/test_add.rb +0 -26
  42. data/test/integration/test_ber.rb +0 -30
  43. data/test/integration/test_bind.rb +0 -222
  44. data/test/integration/test_delete.rb +0 -29
  45. data/test/integration/test_open.rb +0 -87
  46. data/test/integration/test_password_modify.rb +0 -93
  47. data/test/integration/test_return_codes.rb +0 -46
  48. data/test/integration/test_search.rb +0 -77
  49. data/test/support/vm/openldap/.gitignore +0 -1
  50. data/test/test_auth_adapter.rb +0 -15
  51. data/test/test_dn.rb +0 -44
  52. data/test/test_entry.rb +0 -65
  53. data/test/test_filter.rb +0 -223
  54. data/test/test_filter_parser.rb +0 -24
  55. data/test/test_helper.rb +0 -73
  56. data/test/test_ldap.rb +0 -114
  57. data/test/test_ldap_connection.rb +0 -491
  58. data/test/test_ldif.rb +0 -104
  59. data/test/test_password.rb +0 -10
  60. data/test/test_rename.rb +0 -77
  61. data/test/test_search.rb +0 -39
  62. data/test/test_snmp.rb +0 -119
  63. data/test/test_ssl_ber.rb +0 -40
  64. data/test/testdata.ldif +0 -101
  65. data/testserver/ldapserver.rb +0 -209
  66. data/testserver/testdata.ldif +0 -101
@@ -1,87 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestBindIntegration < LDAPIntegrationTestCase
4
- def test_binds_without_open
5
- events = @service.subscribe "bind.net_ldap_connection"
6
-
7
- @ldap.search(filter: "uid=user1", base: "ou=People,dc=example,dc=org", ignore_server_caps: true)
8
- @ldap.search(filter: "uid=user1", base: "ou=People,dc=example,dc=org", ignore_server_caps: true)
9
-
10
- assert_equal 2, events.size
11
- end
12
-
13
- def test_binds_with_open
14
- events = @service.subscribe "bind.net_ldap_connection"
15
-
16
- @ldap.open do
17
- @ldap.search(filter: "uid=user1", base: "ou=People,dc=example,dc=org", ignore_server_caps: true)
18
- @ldap.search(filter: "uid=user1", base: "ou=People,dc=example,dc=org", ignore_server_caps: true)
19
- end
20
-
21
- assert_equal 1, events.size
22
- end
23
-
24
- # NOTE: query for two or more entries so that the socket must be read
25
- # multiple times.
26
- # See The Problem: https://github.com/ruby-ldap/ruby-net-ldap/issues/136
27
-
28
- def test_nested_search_without_open
29
- entries = []
30
- nested_entry = nil
31
-
32
- @ldap.search(filter: "(|(uid=user1)(uid=user2))", base: "ou=People,dc=example,dc=org") do |entry|
33
- entries << entry.uid.first
34
- nested_entry ||= @ldap.search(filter: "uid=user3", base: "ou=People,dc=example,dc=org").first
35
- end
36
-
37
- assert_equal "user3", nested_entry.uid.first
38
- assert_equal %w(user1 user2), entries
39
- end
40
-
41
- def test_nested_search_with_open
42
- entries = []
43
- nested_entry = nil
44
-
45
- @ldap.open do
46
- @ldap.search(filter: "(|(uid=user1)(uid=user2))", base: "ou=People,dc=example,dc=org") do |entry|
47
- entries << entry.uid.first
48
- nested_entry ||= @ldap.search(filter: "uid=user3", base: "ou=People,dc=example,dc=org").first
49
- end
50
- end
51
-
52
- assert_equal "user3", nested_entry.uid.first
53
- assert_equal %w(user1 user2), entries
54
- end
55
-
56
- def test_nested_add_with_open
57
- entries = []
58
- nested_entry = nil
59
-
60
- dn = "uid=nested-open-added-user1,ou=People,dc=example,dc=org"
61
- attrs = {
62
- objectclass: %w(top inetOrgPerson organizationalPerson person),
63
- uid: "nested-open-added-user1",
64
- cn: "nested-open-added-user1",
65
- sn: "nested-open-added-user1",
66
- mail: "nested-open-added-user1@rubyldap.com",
67
- }
68
-
69
- @ldap.delete dn: dn
70
-
71
- @ldap.open do
72
- @ldap.search(filter: "(|(uid=user1)(uid=user2))", base: "ou=People,dc=example,dc=org") do |entry|
73
- entries << entry.uid.first
74
-
75
- nested_entry ||= begin
76
- assert @ldap.add(dn: dn, attributes: attrs), @ldap.get_operation_result.inspect
77
- @ldap.search(base: dn, scope: Net::LDAP::SearchScope_BaseObject).first
78
- end
79
- end
80
- end
81
-
82
- assert_equal %w(user1 user2), entries
83
- assert_equal "nested-open-added-user1", nested_entry.uid.first
84
- ensure
85
- @ldap.delete dn: dn
86
- end
87
- end
@@ -1,93 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestPasswordModifyIntegration < LDAPIntegrationTestCase
4
- def setup
5
- super
6
- @admin_account = {dn: 'cn=admin,dc=example,dc=org', password: 'admin', method: :simple}
7
- @ldap.authenticate @admin_account[:dn], @admin_account[:password]
8
-
9
- @dn = 'uid=modify-password-user1,ou=People,dc=example,dc=org'
10
-
11
- attrs = {
12
- objectclass: %w(top inetOrgPerson organizationalPerson person),
13
- uid: 'modify-password-user1',
14
- cn: 'modify-password-user1',
15
- sn: 'modify-password-user1',
16
- mail: 'modify-password-user1@rubyldap.com',
17
- userPassword: 'admin',
18
- }
19
- unless @ldap.search(base: @dn, scope: Net::LDAP::SearchScope_BaseObject)
20
- assert @ldap.add(dn: @dn, attributes: attrs), @ldap.get_operation_result.inspect
21
- end
22
- assert @ldap.search(base: @dn, scope: Net::LDAP::SearchScope_BaseObject)
23
-
24
- @auth = {
25
- method: :simple,
26
- username: @dn,
27
- password: 'admin',
28
- }
29
- end
30
-
31
- def test_password_modify
32
- assert @ldap.password_modify(dn: @dn,
33
- auth: @auth,
34
- old_password: 'admin',
35
- new_password: 'passworD2')
36
-
37
- assert @ldap.get_operation_result.extended_response.nil?,
38
- 'Should not have generated a new password'
39
-
40
- refute @ldap.bind(username: @dn, password: 'admin', method: :simple),
41
- 'Old password should no longer be valid'
42
-
43
- assert @ldap.bind(username: @dn, password: 'passworD2', method: :simple),
44
- 'New password should be valid'
45
- end
46
-
47
- def test_password_modify_generate
48
- assert @ldap.password_modify(dn: @dn,
49
- auth: @auth,
50
- old_password: 'admin')
51
-
52
- generated_password = @ldap.get_operation_result.extended_response[0][0]
53
-
54
- assert generated_password, 'Should have generated a password'
55
-
56
- refute @ldap.bind(username: @dn, password: 'admin', method: :simple),
57
- 'Old password should no longer be valid'
58
-
59
- assert @ldap.bind(username: @dn, password: generated_password, method: :simple),
60
- 'New password should be valid'
61
- end
62
-
63
- def test_password_modify_generate_no_old_password
64
- assert @ldap.password_modify(dn: @dn,
65
- auth: @auth)
66
-
67
- generated_password = @ldap.get_operation_result.extended_response[0][0]
68
-
69
- assert generated_password, 'Should have generated a password'
70
-
71
- refute @ldap.bind(username: @dn, password: 'admin', method: :simple),
72
- 'Old password should no longer be valid'
73
-
74
- assert @ldap.bind(username: @dn, password: generated_password, method: :simple),
75
- 'New password should be valid'
76
- end
77
-
78
- def test_password_modify_overwrite_old_password
79
- assert @ldap.password_modify(dn: @dn,
80
- auth: @admin_account,
81
- new_password: 'passworD3')
82
-
83
- refute @ldap.bind(username: @dn, password: 'admin', method: :simple),
84
- 'Old password should no longer be valid'
85
-
86
- assert @ldap.bind(username: @dn, password: 'passworD3', method: :simple),
87
- 'New password should be valid'
88
- end
89
-
90
- def teardown
91
- @ldap.delete dn: @dn
92
- end
93
- end
@@ -1,46 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- # NOTE: These tests depend on the OpenLDAP retcode overlay.
4
- # See: section 12.12 http://www.openldap.org/doc/admin24/overlays.html
5
-
6
- class TestReturnCodeIntegration < LDAPIntegrationTestCase
7
- def test_open_error
8
- @ldap.authenticate "cn=fake", "creds"
9
- @ldap.open do
10
- result = @ldap.get_operation_result
11
- assert_equal Net::LDAP::ResultCodeInvalidCredentials, result.code
12
- end
13
- end
14
-
15
- def test_operations_error
16
- refute @ldap.search(filter: "cn=operationsError", base: "ou=Retcodes,dc=example,dc=org")
17
- assert result = @ldap.get_operation_result
18
-
19
- assert_equal Net::LDAP::ResultCodeOperationsError, result.code
20
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeOperationsError], result.message
21
- end
22
-
23
- def test_protocol_error
24
- refute @ldap.search(filter: "cn=protocolError", base: "ou=Retcodes,dc=example,dc=org")
25
- assert result = @ldap.get_operation_result
26
-
27
- assert_equal Net::LDAP::ResultCodeProtocolError, result.code
28
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeProtocolError], result.message
29
- end
30
-
31
- def test_time_limit_exceeded
32
- assert @ldap.search(filter: "cn=timeLimitExceeded", base: "ou=Retcodes,dc=example,dc=org")
33
- assert result = @ldap.get_operation_result
34
-
35
- assert_equal Net::LDAP::ResultCodeTimeLimitExceeded, result.code
36
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeTimeLimitExceeded], result.message
37
- end
38
-
39
- def test_size_limit_exceeded
40
- assert @ldap.search(filter: "cn=sizeLimitExceeded", base: "ou=Retcodes,dc=example,dc=org")
41
- assert result = @ldap.get_operation_result
42
-
43
- assert_equal Net::LDAP::ResultCodeSizeLimitExceeded, result.code
44
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeSizeLimitExceeded], result.message
45
- end
46
- end
@@ -1,77 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestSearchIntegration < LDAPIntegrationTestCase
4
- def test_search
5
- entries = []
6
-
7
- result = @ldap.search(base: "dc=example,dc=org") do |entry|
8
- assert_kind_of Net::LDAP::Entry, entry
9
- entries << entry
10
- end
11
-
12
- refute entries.empty?
13
- assert_equal entries, result
14
- end
15
-
16
- def test_search_without_result
17
- entries = []
18
-
19
- result = @ldap.search(base: "dc=example,dc=org", return_result: false) do |entry|
20
- assert_kind_of Net::LDAP::Entry, entry
21
- entries << entry
22
- end
23
-
24
- assert result
25
- refute_equal entries, result
26
- end
27
-
28
- def test_search_filter_string
29
- entries = @ldap.search(base: "dc=example,dc=org", filter: "(uid=user1)")
30
- assert_equal 1, entries.size
31
- end
32
-
33
- def test_search_filter_object
34
- filter = Net::LDAP::Filter.eq("uid", "user1") | Net::LDAP::Filter.eq("uid", "user2")
35
- entries = @ldap.search(base: "dc=example,dc=org", filter: filter)
36
- assert_equal 2, entries.size
37
- end
38
-
39
- def test_search_constrained_attributes
40
- entry = @ldap.search(base: "uid=user1,ou=People,dc=example,dc=org", attributes: ["cn", "sn"]).first
41
- assert_equal [:cn, :dn, :sn], entry.attribute_names.sort # :dn is always included
42
- assert_empty entry[:mail]
43
- end
44
-
45
- def test_search_attributes_only
46
- entry = @ldap.search(base: "uid=user1,ou=People,dc=example,dc=org", attributes_only: true).first
47
-
48
- assert_empty entry[:cn], "unexpected attribute value: #{entry[:cn]}"
49
- end
50
-
51
- def test_search_timeout
52
- entries = []
53
- events = @service.subscribe "search.net_ldap_connection"
54
-
55
- result = @ldap.search(base: "dc=example,dc=org", time: 5) do |entry|
56
- assert_kind_of Net::LDAP::Entry, entry
57
- entries << entry
58
- end
59
-
60
- payload, = events.pop
61
- assert_equal 5, payload[:time]
62
- assert_equal entries, result
63
- end
64
-
65
- # http://tools.ietf.org/html/rfc4511#section-4.5.1.4
66
- def test_search_with_size
67
- entries = []
68
-
69
- result = @ldap.search(base: "dc=example,dc=org", size: 1) do |entry|
70
- assert_kind_of Net::LDAP::Entry, entry
71
- entries << entry
72
- end
73
-
74
- assert_equal 1, result.size
75
- assert_equal entries, result
76
- end
77
- end
@@ -1 +0,0 @@
1
- /.vagrant
@@ -1,15 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestAuthAdapter < Test::Unit::TestCase
4
- class FakeSocket
5
- def initialize(*args)
6
- end
7
- end
8
-
9
- def test_undefined_auth_adapter
10
- conn = Net::LDAP::Connection.new(host: 'ldap.example.com', port: 379, :socket_class => FakeSocket)
11
- assert_raise Net::LDAP::AuthMethodUnsupportedError, "Unsupported auth method (foo)" do
12
- conn.bind(method: :foo)
13
- end
14
- end
15
- end
data/test/test_dn.rb DELETED
@@ -1,44 +0,0 @@
1
- require_relative 'test_helper'
2
- require 'net/ldap/dn'
3
-
4
- class TestDN < Test::Unit::TestCase
5
- def test_escape
6
- assert_equal '\\,\\+\\"\\\\\\<\\>\\;', Net::LDAP::DN.escape(',+"\\<>;')
7
- end
8
-
9
- def test_escape_on_initialize
10
- dn = Net::LDAP::DN.new('cn', ',+"\\<>;', 'ou=company')
11
- assert_equal 'cn=\\,\\+\\"\\\\\\<\\>\\;,ou=company', dn.to_s
12
- end
13
-
14
- def test_to_a
15
- dn = Net::LDAP::DN.new('cn=James, ou=Company\\,\\20LLC')
16
- assert_equal ['cn', 'James', 'ou', 'Company, LLC'], dn.to_a
17
- end
18
-
19
- def test_to_a_parenthesis
20
- dn = Net::LDAP::DN.new('cn = \ James , ou = "Comp\28ny" ')
21
- assert_equal ['cn', ' James', 'ou', 'Comp(ny'], dn.to_a
22
- end
23
-
24
- def test_to_a_hash_symbol
25
- dn = Net::LDAP::DN.new('1.23.4= #A3B4D5 ,ou=Company')
26
- assert_equal ['1.23.4', '#A3B4D5', 'ou', 'Company'], dn.to_a
27
- end
28
-
29
- # TODO: raise a more specific exception than RuntimeError
30
- def test_bad_input_raises_error
31
- [
32
- 'cn=James,',
33
- 'cn=#aa aa',
34
- 'cn="James',
35
- 'cn=J\ames',
36
- 'cn=\\',
37
- '1.2.d=Value',
38
- 'd1.2=Value',
39
- ].each do |input|
40
- dn = Net::LDAP::DN.new(input)
41
- assert_raises(RuntimeError) { dn.to_a }
42
- end
43
- end
44
- end
data/test/test_entry.rb DELETED
@@ -1,65 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class TestEntry < Test::Unit::TestCase
4
- def setup
5
- @entry = Net::LDAP::Entry.new 'cn=Barbara,o=corp'
6
- end
7
-
8
- def test_dn
9
- assert_equal 'cn=Barbara,o=corp', @entry.dn
10
- end
11
-
12
- def test_empty_array_when_accessing_nonexistent_attribute
13
- assert_equal [], @entry['sn']
14
- end
15
-
16
- def test_attribute_assignment
17
- @entry['sn'] = 'Jensen'
18
- assert_equal ['Jensen'], @entry['sn']
19
- assert_equal ['Jensen'], @entry.sn
20
- assert_equal ['Jensen'], @entry[:sn]
21
-
22
- @entry[:sn] = 'Jensen'
23
- assert_equal ['Jensen'], @entry['sn']
24
- assert_equal ['Jensen'], @entry.sn
25
- assert_equal ['Jensen'], @entry[:sn]
26
-
27
- @entry.sn = 'Jensen'
28
- assert_equal ['Jensen'], @entry['sn']
29
- assert_equal ['Jensen'], @entry.sn
30
- assert_equal ['Jensen'], @entry[:sn]
31
- end
32
-
33
- def test_case_insensitive_attribute_names
34
- @entry['sn'] = 'Jensen'
35
- assert_equal ['Jensen'], @entry.sn
36
- assert_equal ['Jensen'], @entry.Sn
37
- assert_equal ['Jensen'], @entry.SN
38
- assert_equal ['Jensen'], @entry['sn']
39
- assert_equal ['Jensen'], @entry['Sn']
40
- assert_equal ['Jensen'], @entry['SN']
41
- end
42
- end
43
-
44
- class TestEntryLDIF < Test::Unit::TestCase
45
- def setup
46
- @entry = Net::LDAP::Entry.from_single_ldif_string(
47
- %Q{dn: something
48
- foo: foo
49
- barAttribute: bar
50
- })
51
- end
52
-
53
- def test_attribute
54
- assert_equal ['foo'], @entry.foo
55
- assert_equal ['foo'], @entry.Foo
56
- end
57
-
58
- def test_modify_attribute
59
- @entry.foo = 'bar'
60
- assert_equal ['bar'], @entry.foo
61
-
62
- @entry.fOo= 'baz'
63
- assert_equal ['baz'], @entry.foo
64
- end
65
- end
data/test/test_filter.rb DELETED
@@ -1,223 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class TestFilter < Test::Unit::TestCase
4
- Filter = Net::LDAP::Filter
5
-
6
- def test_bug_7534_rfc2254
7
- assert_equal("(cn=Tim Wizard)",
8
- Filter.from_rfc2254("(cn=Tim Wizard)").to_rfc2254)
9
- end
10
-
11
- def test_invalid_filter_string
12
- assert_raises(Net::LDAP::FilterSyntaxInvalidError) { Filter.from_rfc2254("") }
13
- end
14
-
15
- def test_invalid_filter
16
- assert_raises(Net::LDAP::OperatorError) do
17
- # This test exists to prove that our constructor blocks unknown filter
18
- # types. All filters must be constructed using helpers.
19
- Filter.__send__(:new, :xx, nil, nil)
20
- end
21
- end
22
-
23
- def test_to_s
24
- assert_equal("(uid=george *)", Filter.eq("uid", "george *").to_s)
25
- end
26
-
27
- def test_convenience_filters
28
- assert_equal("(uid=\\2A)", Filter.equals("uid", "*").to_s)
29
- assert_equal("(uid=\\28*)", Filter.begins("uid", "(").to_s)
30
- assert_equal("(uid=*\\29)", Filter.ends("uid", ")").to_s)
31
- assert_equal("(uid=*\\5C*)", Filter.contains("uid", "\\").to_s)
32
- end
33
-
34
- def test_c2
35
- assert_equal("(uid=george *)",
36
- Filter.from_rfc2254("uid=george *").to_rfc2254)
37
- assert_equal("(uid:=george *)",
38
- Filter.from_rfc2254("uid:=george *").to_rfc2254)
39
- assert_equal("(uid=george*)",
40
- Filter.from_rfc2254(" ( uid = george* ) ").to_rfc2254)
41
- assert_equal("(!(uid=george*))",
42
- Filter.from_rfc2254("uid!=george*").to_rfc2254)
43
- assert_equal("(uid<=george*)",
44
- Filter.from_rfc2254("uid <= george*").to_rfc2254)
45
- assert_equal("(uid>=george*)",
46
- Filter.from_rfc2254("uid>=george*").to_rfc2254)
47
- assert_equal("(&(uid=george*)(mail=*))",
48
- Filter.from_rfc2254("(& (uid=george* ) (mail=*))").to_rfc2254)
49
- assert_equal("(|(uid=george*)(mail=*))",
50
- Filter.from_rfc2254("(| (uid=george* ) (mail=*))").to_rfc2254)
51
- assert_equal("(!(mail=*))",
52
- Filter.from_rfc2254("(! (mail=*))").to_rfc2254)
53
- end
54
-
55
- def test_filter_with_single_clause
56
- assert_equal("(cn=name)", Net::LDAP::Filter.construct("(&(cn=name))").to_s)
57
- end
58
-
59
- def test_filters_from_ber
60
- [
61
- Net::LDAP::Filter.eq("objectclass", "*"),
62
- Net::LDAP::Filter.pres("objectclass"),
63
- Net::LDAP::Filter.eq("objectclass", "ou"),
64
- Net::LDAP::Filter.ge("uid", "500"),
65
- Net::LDAP::Filter.le("uid", "500"),
66
- (~ Net::LDAP::Filter.pres("objectclass")),
67
- (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou")),
68
- (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou") & Net::LDAP::Filter.pres("sn")),
69
- (Net::LDAP::Filter.pres("objectclass") | Net::LDAP::Filter.pres("ou") | Net::LDAP::Filter.pres("sn")),
70
-
71
- Net::LDAP::Filter.eq("objectclass", "*aaa"),
72
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb"),
73
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc"),
74
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb"),
75
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc"),
76
- Net::LDAP::Filter.eq("objectclass", "abc*def*1111*22*g"),
77
- Net::LDAP::Filter.eq("objectclass", "*aaa*"),
78
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*"),
79
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc*"),
80
- Net::LDAP::Filter.eq("objectclass", "aaa*"),
81
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb*"),
82
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc*"),
83
- ].each do |ber|
84
- f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax))
85
- assert(f == ber)
86
- assert_equal(f.to_ber, ber.to_ber)
87
- end
88
- end
89
-
90
- def test_ber_from_rfc2254_filter
91
- [
92
- Net::LDAP::Filter.construct("objectclass=*"),
93
- Net::LDAP::Filter.construct("objectclass=ou"),
94
- Net::LDAP::Filter.construct("uid >= 500"),
95
- Net::LDAP::Filter.construct("uid <= 500"),
96
- Net::LDAP::Filter.construct("(!(uid=*))"),
97
- Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*))"),
98
- Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*)(sn=*))"),
99
- Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*))"),
100
- Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*)(sn=*))"),
101
-
102
- Net::LDAP::Filter.construct("objectclass=*aaa"),
103
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb"),
104
- Net::LDAP::Filter.construct("objectclass=*aaa bbb"),
105
- Net::LDAP::Filter.construct("objectclass=*aaa bbb"),
106
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc"),
107
- Net::LDAP::Filter.construct("objectclass=aaa*bbb"),
108
- Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc"),
109
- Net::LDAP::Filter.construct("objectclass=abc*def*1111*22*g"),
110
- Net::LDAP::Filter.construct("objectclass=*aaa*"),
111
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb*"),
112
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc*"),
113
- Net::LDAP::Filter.construct("objectclass=aaa*"),
114
- Net::LDAP::Filter.construct("objectclass=aaa*bbb*"),
115
- Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc*"),
116
- ].each do |ber|
117
- f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax))
118
- assert(f == ber)
119
- assert_equal(f.to_ber, ber.to_ber)
120
- end
121
- end
122
- end
123
-
124
- # tests ported over from rspec. Not sure if these overlap with the above
125
- # https://github.com/ruby-ldap/ruby-net-ldap/pull/121
126
- class TestFilterRSpec < Test::Unit::TestCase
127
- def test_ex_convert
128
- assert_equal '(foo:=bar)', Net::LDAP::Filter.ex('foo', 'bar').to_s
129
- end
130
-
131
- def test_ex_rfc2254_roundtrip
132
- filter = Net::LDAP::Filter.ex('foo', 'bar')
133
- assert_equal filter, Net::LDAP::Filter.from_rfc2254(filter.to_s)
134
- end
135
-
136
- def test_ber_conversion
137
- filter = Net::LDAP::Filter.ex('foo', 'bar')
138
- ber = filter.to_ber
139
- assert_equal filter, Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
140
- end
141
-
142
- [
143
- '(o:dn:=Ace Industry)',
144
- '(:dn:2.4.8.10:=Dino)',
145
- '(cn:dn:1.2.3.4.5:=John Smith)',
146
- '(sn:dn:2.4.6.8.10:=Barbara Jones)',
147
- '(&(sn:dn:2.4.6.8.10:=Barbara Jones))',
148
- ].each_with_index do |filter_str, index|
149
- define_method "test_decode_filter_#{index}" do
150
- filter = Net::LDAP::Filter.from_rfc2254(filter_str)
151
- assert_kind_of Net::LDAP::Filter, filter
152
- end
153
-
154
- define_method "test_ber_conversion_#{index}" do
155
- filter = Net::LDAP::Filter.from_rfc2254(filter_str)
156
- ber = Net::LDAP::Filter.from_rfc2254(filter_str).to_ber
157
- assert_equal filter, Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
158
- end
159
- end
160
-
161
- def test_apostrophes
162
- assert_equal "(uid=O'Keefe)", Net::LDAP::Filter.construct("uid=O'Keefe").to_rfc2254
163
- end
164
-
165
- def test_equals
166
- assert_equal Net::LDAP::Filter.eq('dn', 'f\2Aoo'), Net::LDAP::Filter.equals('dn', 'f*oo')
167
- end
168
-
169
- def test_begins
170
- assert_equal Net::LDAP::Filter.eq('dn', 'f\2Aoo*'), Net::LDAP::Filter.begins('dn', 'f*oo')
171
- end
172
-
173
- def test_ends
174
- assert_equal Net::LDAP::Filter.eq('dn', '*f\2Aoo'), Net::LDAP::Filter.ends('dn', 'f*oo')
175
- end
176
-
177
- def test_contains
178
- assert_equal Net::LDAP::Filter.eq('dn', '*f\2Aoo*'), Net::LDAP::Filter.contains('dn', 'f*oo')
179
- end
180
-
181
- def test_escape
182
- # escapes nul, *, (, ) and \\
183
- assert_equal "\\00\\2A\\28\\29\\5C", Net::LDAP::Filter.escape("\0*()\\")
184
- end
185
-
186
- def test_well_known_ber_string
187
- ber = "\xa4\x2d" \
188
- "\x04\x0b" "objectclass" \
189
- "\x30\x1e" \
190
- "\x80\x08" "foo" "*\\" "bar" \
191
- "\x81\x08" "foo" "*\\" "bar" \
192
- "\x82\x08" "foo" "*\\" "bar".b
193
-
194
- [
195
- "foo" "\\2A\\5C" "bar",
196
- "foo" "\\2a\\5c" "bar",
197
- "foo" "\\2A\\5c" "bar",
198
- "foo" "\\2a\\5C" "bar",
199
- ].each do |escaped|
200
- # unescapes escaped characters
201
- filter = Net::LDAP::Filter.eq("objectclass", "#{escaped}*#{escaped}*#{escaped}")
202
- assert_equal ber, filter.to_ber
203
- end
204
- end
205
-
206
- def test_parse_ber_escapes_characters
207
- ber = "\xa4\x2d" \
208
- "\x04\x0b" "objectclass" \
209
- "\x30\x1e" \
210
- "\x80\x08" "foo" "*\\" "bar" \
211
- "\x81\x08" "foo" "*\\" "bar" \
212
- "\x82\x08" "foo" "*\\" "bar".b
213
-
214
- escaped = Net::LDAP::Filter.escape("foo" "*\\" "bar")
215
- filter = Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
216
- assert_equal "(objectclass=#{escaped}*#{escaped}*#{escaped})", filter.to_s
217
- end
218
-
219
- def test_unescape_fixnums
220
- filter = Net::LDAP::Filter.eq("objectclass", 3)
221
- assert_equal "\xA3\x10\x04\vobjectclass\x04\x013".b, filter.to_ber
222
- end
223
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- require_relative 'test_helper'
3
-
4
- class TestFilterParser < Test::Unit::TestCase
5
- def test_ascii
6
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(cn=name)")
7
- end
8
-
9
- def test_multibyte_characters
10
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(cn=名前)")
11
- end
12
-
13
- def test_brackets
14
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(cn=[{something}])")
15
- end
16
-
17
- def test_slash
18
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(departmentNumber=FOO//BAR/FOO)")
19
- end
20
-
21
- def test_colons
22
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(ismemberof=cn=edu:berkeley:app:calmessages:deans,ou=campus groups,dc=berkeley,dc=edu)")
23
- end
24
- end