From 41b230d9bc6e282f4b8e30c374a6b071f510cb92 Mon Sep 17 00:00:00 2001 From: Martin Carpenter Date: Sat, 23 Jul 2011 03:26:37 +0200 Subject: [PATCH 1/3] Fix identation --- test/test_filter.rb | 144 ++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/test/test_filter.rb b/test/test_filter.rb index 2ddbb53..03436e0 100644 --- a/test/test_filter.rb +++ b/test/test_filter.rb @@ -31,92 +31,92 @@ class TestFilter < Test::Unit::TestCase assert_equal("(uid=*\\5C*)", Filter.contains("uid", "\\").to_s) end - def test_c2 + def test_c2 assert_equal("(uid=george *)", Filter.from_rfc2254("uid=george *").to_rfc2254) assert_equal("(uid:=george *)", Filter.from_rfc2254("uid:=george *").to_rfc2254) assert_equal("(uid=george*)", Filter.from_rfc2254(" ( uid = george* ) ").to_rfc2254) - assert_equal("(!(uid=george*))", + assert_equal("(!(uid=george*))", Filter.from_rfc2254("uid!=george*").to_rfc2254) - assert_equal("(uid<=george*)", + assert_equal("(uid<=george*)", Filter.from_rfc2254("uid <= george*").to_rfc2254) - assert_equal("(uid>=george*)", + assert_equal("(uid>=george*)", Filter.from_rfc2254("uid>=george*").to_rfc2254) - assert_equal("(&(uid=george*)(mail=*))", + assert_equal("(&(uid=george*)(mail=*))", Filter.from_rfc2254("(& (uid=george* ) (mail=*))").to_rfc2254) - assert_equal("(|(uid=george*)(mail=*))", + assert_equal("(|(uid=george*)(mail=*))", Filter.from_rfc2254("(| (uid=george* ) (mail=*))").to_rfc2254) - assert_equal("(!(mail=*))", + assert_equal("(!(mail=*))", Filter.from_rfc2254("(! (mail=*))").to_rfc2254) - end + end - def test_filter_with_single_clause - assert_equal("(cn=name)", Net::LDAP::Filter.construct("(&(cn=name))").to_s) + def test_filter_with_single_clause + assert_equal("(cn=name)", Net::LDAP::Filter.construct("(&(cn=name))").to_s) + end + + def test_filters_from_ber + [ + Net::LDAP::Filter.eq("objectclass", "*"), + Net::LDAP::Filter.pres("objectclass"), + Net::LDAP::Filter.eq("objectclass", "ou"), + Net::LDAP::Filter.ge("uid", "500"), + Net::LDAP::Filter.le("uid", "500"), + (~ Net::LDAP::Filter.pres("objectclass")), + (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou")), + (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou") & Net::LDAP::Filter.pres("sn")), + (Net::LDAP::Filter.pres("objectclass") | Net::LDAP::Filter.pres("ou") | Net::LDAP::Filter.pres("sn")), + + Net::LDAP::Filter.eq("objectclass", "*aaa"), + Net::LDAP::Filter.eq("objectclass", "*aaa*bbb"), + Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc"), + Net::LDAP::Filter.eq("objectclass", "aaa*bbb"), + Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc"), + Net::LDAP::Filter.eq("objectclass", "abc*def*1111*22*g"), + Net::LDAP::Filter.eq("objectclass", "*aaa*"), + Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*"), + Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc*"), + Net::LDAP::Filter.eq("objectclass", "aaa*"), + Net::LDAP::Filter.eq("objectclass", "aaa*bbb*"), + Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc*"), + ].each do |ber| + f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax)) + assert(f == ber) + assert_equal(f.to_ber, ber.to_ber) end + end - def test_filters_from_ber - [ - Net::LDAP::Filter.eq("objectclass", "*"), - Net::LDAP::Filter.pres("objectclass"), - Net::LDAP::Filter.eq("objectclass", "ou"), - Net::LDAP::Filter.ge("uid", "500"), - Net::LDAP::Filter.le("uid", "500"), - (~ Net::LDAP::Filter.pres("objectclass")), - (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou")), - (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou") & Net::LDAP::Filter.pres("sn")), - (Net::LDAP::Filter.pres("objectclass") | Net::LDAP::Filter.pres("ou") | Net::LDAP::Filter.pres("sn")), + def test_ber_from_rfc2254_filter + [ + Net::LDAP::Filter.construct("objectclass=*"), + Net::LDAP::Filter.construct("objectclass=ou"), + Net::LDAP::Filter.construct("uid >= 500"), + Net::LDAP::Filter.construct("uid <= 500"), + Net::LDAP::Filter.construct("(!(uid=*))"), + Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*))"), + Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*)(sn=*))"), + Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*))"), + Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*)(sn=*))"), - Net::LDAP::Filter.eq("objectclass", "*aaa"), - Net::LDAP::Filter.eq("objectclass", "*aaa*bbb"), - Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc"), - Net::LDAP::Filter.eq("objectclass", "aaa*bbb"), - Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc"), - Net::LDAP::Filter.eq("objectclass", "abc*def*1111*22*g"), - Net::LDAP::Filter.eq("objectclass", "*aaa*"), - Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*"), - Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc*"), - Net::LDAP::Filter.eq("objectclass", "aaa*"), - Net::LDAP::Filter.eq("objectclass", "aaa*bbb*"), - Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc*"), - ].each do |ber| - f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax)) - assert(f == ber) - assert_equal(f.to_ber, ber.to_ber) - end - end - - def test_ber_from_rfc2254_filter - [ - Net::LDAP::Filter.construct("objectclass=*"), - Net::LDAP::Filter.construct("objectclass=ou"), - Net::LDAP::Filter.construct("uid >= 500"), - Net::LDAP::Filter.construct("uid <= 500"), - Net::LDAP::Filter.construct("(!(uid=*))"), - Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*))"), - Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*)(sn=*))"), - Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*))"), - Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*)(sn=*))"), - - Net::LDAP::Filter.construct("objectclass=*aaa"), - Net::LDAP::Filter.construct("objectclass=*aaa*bbb"), - Net::LDAP::Filter.construct("objectclass=*aaa bbb"), - Net::LDAP::Filter.construct("objectclass=*aaa bbb"), - Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc"), - Net::LDAP::Filter.construct("objectclass=aaa*bbb"), - Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc"), - Net::LDAP::Filter.construct("objectclass=abc*def*1111*22*g"), - Net::LDAP::Filter.construct("objectclass=*aaa*"), - Net::LDAP::Filter.construct("objectclass=*aaa*bbb*"), - Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc*"), - Net::LDAP::Filter.construct("objectclass=aaa*"), - Net::LDAP::Filter.construct("objectclass=aaa*bbb*"), - Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc*"), - ].each do |ber| - f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax)) - assert(f == ber) - assert_equal(f.to_ber, ber.to_ber) - end - end + Net::LDAP::Filter.construct("objectclass=*aaa"), + Net::LDAP::Filter.construct("objectclass=*aaa*bbb"), + Net::LDAP::Filter.construct("objectclass=*aaa bbb"), + Net::LDAP::Filter.construct("objectclass=*aaa bbb"), + Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc"), + Net::LDAP::Filter.construct("objectclass=aaa*bbb"), + Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc"), + Net::LDAP::Filter.construct("objectclass=abc*def*1111*22*g"), + Net::LDAP::Filter.construct("objectclass=*aaa*"), + Net::LDAP::Filter.construct("objectclass=*aaa*bbb*"), + Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc*"), + Net::LDAP::Filter.construct("objectclass=aaa*"), + Net::LDAP::Filter.construct("objectclass=aaa*bbb*"), + Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc*"), + ].each do |ber| + f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax)) + assert(f == ber) + assert_equal(f.to_ber, ber.to_ber) + end + end end From 41bee0a690a57b57624d80b550c6ecfac2169935 Mon Sep 17 00:00:00 2001 From: Martin Carpenter Date: Sat, 23 Jul 2011 03:31:42 +0200 Subject: [PATCH 2/3] Fix LDIF contination to single elided space RFC 2849 http://tools.ietf.org/html/rfc2849: SPACE = %x20 ; ASCII SP, space ... 2) Any non-empty line, including comment lines, in an LDIF file MAY be folded by inserting a line separator (SEP) and a SPACE. Folding MUST NOT occur before the first character of the line. In other words, folding a line into two lines, the first of which is empty, is not permitted. Any line that begins with a single space MUST be treated as a continuation of the previous (non-empty) line. When joining folded lines, exactly one space character at the beginning of each continued line must be discarded. Implementations SHOULD NOT fold lines in the middle of a multi-byte UTF-8 character. --- lib/net/ldap/dataset.rb | 4 ++-- test/test_ldif.rb | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/net/ldap/dataset.rb b/lib/net/ldap/dataset.rb index 363d259..ffdee11 100644 --- a/lib/net/ldap/dataset.rb +++ b/lib/net/ldap/dataset.rb @@ -117,8 +117,8 @@ class Net::LDAP::Dataset < Hash while line new_line = io.gets - if new_line =~ /^[\s]+/ - line << " " << $' + if new_line =~ /^ / + line << $' else nextline = new_line diff --git a/test/test_ldif.rb b/test/test_ldif.rb index 77f8b86..275456a 100644 --- a/test/test_ldif.rb +++ b/test/test_ldif.rb @@ -31,8 +31,15 @@ class TestLdif < Test::Unit::TestCase end def test_ldif_with_continuation_lines - ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n")) - assert_equal(true, ds.has_key?("abcdefg hijklmn")) + ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n")) + assert_equal(true, ds.has_key?("abcdefghijklmn")) + end + + def test_ldif_with_continuation_lines_and_extra_whitespace + ds1 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n")) + assert_equal(true, ds1.has_key?("abcdefg hijklmn")) + ds2 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hij klmn\r\n\r\n")) + assert_equal(true, ds2.has_key?("abcdefghij klmn")) end # TODO, INADEQUATE. We need some more tests From d2e00dfd5896b9ad8e416ba774bbb56edaa2571e Mon Sep 17 00:00:00 2001 From: Martin Carpenter Date: Sat, 10 Sep 2011 10:39:05 +0200 Subject: [PATCH 3/3] Test single tab is not continued --- test/test_ldif.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/test_ldif.rb b/test/test_ldif.rb index 275456a..fb4d5ee 100644 --- a/test/test_ldif.rb +++ b/test/test_ldif.rb @@ -42,6 +42,11 @@ class TestLdif < Test::Unit::TestCase assert_equal(true, ds2.has_key?("abcdefghij klmn")) end + def test_ldif_tab_is_not_continuation + ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: key\r\n\tnotcontinued\r\n\r\n")) + assert_equal(true, ds.has_key?("key")) + end + # TODO, INADEQUATE. We need some more tests # to verify the content. def test_ldif