net-ldap 0.16.3 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.rdoc +36 -0
- data/README.rdoc +9 -2
- data/lib/net/ldap.rb +25 -2
- data/lib/net/ldap/connection.rb +1 -1
- data/lib/net/ldap/dataset.rb +2 -2
- data/lib/net/ldap/entry.rb +13 -2
- data/lib/net/ldap/error.rb +1 -26
- data/lib/net/ldap/password.rb +4 -0
- data/lib/net/ldap/version.rb +1 -1
- metadata +12 -88
- data/.gitignore +0 -10
- data/.rubocop.yml +0 -20
- data/.rubocop_todo.yml +0 -723
- data/.travis.yml +0 -57
- data/CONTRIBUTING.md +0 -54
- data/Gemfile +0 -2
- data/Rakefile +0 -23
- data/net-ldap.gemspec +0 -37
- data/script/changelog +0 -47
- data/script/ldap-docker +0 -12
- data/script/package +0 -7
- data/script/release +0 -16
- data/test/ber/core_ext/test_array.rb +0 -22
- data/test/ber/core_ext/test_string.rb +0 -25
- data/test/ber/test_ber.rb +0 -153
- data/test/fixtures/ca/docker-ca.pem +0 -18
- data/test/fixtures/ldif/06-retcode.ldif +0 -75
- data/test/fixtures/ldif/50-seed.ldif +0 -374
- data/test/integration/test_add.rb +0 -26
- data/test/integration/test_ber.rb +0 -30
- data/test/integration/test_bind.rb +0 -221
- data/test/integration/test_delete.rb +0 -29
- data/test/integration/test_open.rb +0 -87
- data/test/integration/test_password_modify.rb +0 -93
- data/test/integration/test_return_codes.rb +0 -46
- data/test/integration/test_search.rb +0 -77
- data/test/support/vm/openldap/.gitignore +0 -1
- data/test/test_auth_adapter.rb +0 -15
- data/test/test_dn.rb +0 -43
- data/test/test_entry.rb +0 -66
- data/test/test_filter.rb +0 -223
- data/test/test_filter_parser.rb +0 -29
- data/test/test_helper.rb +0 -73
- data/test/test_ldap.rb +0 -114
- data/test/test_ldap_connection.rb +0 -505
- data/test/test_ldif.rb +0 -104
- data/test/test_password.rb +0 -10
- data/test/test_rename.rb +0 -77
- data/test/test_search.rb +0 -39
- data/test/test_snmp.rb +0 -118
- data/test/test_ssl_ber.rb +0 -44
- data/test/testdata.ldif +0 -101
- data/testserver/ldapserver.rb +0 -200
- data/testserver/testdata.ldif +0 -101
@@ -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
|
data/test/test_auth_adapter.rb
DELETED
@@ -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,43 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
require_relative '../lib/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
|
-
def test_bad_input_raises_error
|
30
|
-
[
|
31
|
-
'cn=James,',
|
32
|
-
'cn=#aa aa',
|
33
|
-
'cn="James',
|
34
|
-
'cn=J\ames',
|
35
|
-
'cn=\\',
|
36
|
-
'1.2.d=Value',
|
37
|
-
'd1.2=Value',
|
38
|
-
].each do |input|
|
39
|
-
dn = Net::LDAP::DN.new(input)
|
40
|
-
assert_raises(Net::LDAP::InvalidDNError) { dn.to_a }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/test/test_entry.rb
DELETED
@@ -1,66 +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
|
-
)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_attribute
|
55
|
-
assert_equal ['foo'], @entry.foo
|
56
|
-
assert_equal ['foo'], @entry.Foo
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_modify_attribute
|
60
|
-
@entry.foo = 'bar'
|
61
|
-
assert_equal ['bar'], @entry.foo
|
62
|
-
|
63
|
-
@entry.fOo = 'baz'
|
64
|
-
assert_equal ['baz'], @entry.foo
|
65
|
-
end
|
66
|
-
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
|