Skip to content

Commit 5c3cbb7

Browse files
committed
Merge pull request #16 from mcarpenter/master
Issue #15: LDIF continuation character
2 parents 7dd6c3a + d2e00df commit 5c3cbb7

File tree

3 files changed

+87
-75
lines changed

3 files changed

+87
-75
lines changed

lib/net/ldap/dataset.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ def read_ldif(io)
117117
while line
118118
new_line = io.gets
119119

120-
if new_line =~ /^[\s]+/
121-
line << " " << $'
120+
if new_line =~ /^ /
121+
line << $'
122122
else
123123
nextline = new_line
124124

test/test_filter.rb

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -31,92 +31,92 @@ def test_convenience_filters
3131
assert_equal("(uid=*\\5C*)", Filter.contains("uid", "\\").to_s)
3232
end
3333

34-
def test_c2
34+
def test_c2
3535
assert_equal("(uid=george *)",
3636
Filter.from_rfc2254("uid=george *").to_rfc2254)
3737
assert_equal("(uid:=george *)",
3838
Filter.from_rfc2254("uid:=george *").to_rfc2254)
3939
assert_equal("(uid=george*)",
4040
Filter.from_rfc2254(" ( uid = george* ) ").to_rfc2254)
41-
assert_equal("(!(uid=george*))",
41+
assert_equal("(!(uid=george*))",
4242
Filter.from_rfc2254("uid!=george*").to_rfc2254)
43-
assert_equal("(uid<=george*)",
43+
assert_equal("(uid<=george*)",
4444
Filter.from_rfc2254("uid <= george*").to_rfc2254)
45-
assert_equal("(uid>=george*)",
45+
assert_equal("(uid>=george*)",
4646
Filter.from_rfc2254("uid>=george*").to_rfc2254)
47-
assert_equal("(&(uid=george*)(mail=*))",
47+
assert_equal("(&(uid=george*)(mail=*))",
4848
Filter.from_rfc2254("(& (uid=george* ) (mail=*))").to_rfc2254)
49-
assert_equal("(|(uid=george*)(mail=*))",
49+
assert_equal("(|(uid=george*)(mail=*))",
5050
Filter.from_rfc2254("(| (uid=george* ) (mail=*))").to_rfc2254)
51-
assert_equal("(!(mail=*))",
51+
assert_equal("(!(mail=*))",
5252
Filter.from_rfc2254("(! (mail=*))").to_rfc2254)
53-
end
53+
end
5454

55-
def test_filter_with_single_clause
56-
assert_equal("(cn=name)", Net::LDAP::Filter.construct("(&(cn=name))").to_s)
57-
end
55+
def test_filter_with_single_clause
56+
assert_equal("(cn=name)", Net::LDAP::Filter.construct("(&(cn=name))").to_s)
57+
end
5858

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")),
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")),
7070

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
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
8989

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=*))"),
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=*))"),
101101

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
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
122122
end

test/test_ldif.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,20 @@ def test_ldif_with_password
3131
end
3232

3333
def test_ldif_with_continuation_lines
34-
ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n"))
35-
assert_equal(true, ds.has_key?("abcdefg hijklmn"))
34+
ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n"))
35+
assert_equal(true, ds.has_key?("abcdefghijklmn"))
36+
end
37+
38+
def test_ldif_with_continuation_lines_and_extra_whitespace
39+
ds1 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n"))
40+
assert_equal(true, ds1.has_key?("abcdefg hijklmn"))
41+
ds2 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hij klmn\r\n\r\n"))
42+
assert_equal(true, ds2.has_key?("abcdefghij klmn"))
43+
end
44+
45+
def test_ldif_tab_is_not_continuation
46+
ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: key\r\n\tnotcontinued\r\n\r\n"))
47+
assert_equal(true, ds.has_key?("key"))
3648
end
3749

3850
# TODO, INADEQUATE. We need some more tests

0 commit comments

Comments
 (0)