'does not strip an escaped leading space in an attribute value'|'uid=\\ John Smith,ou=People,dc=example,dc=com'|'uid=\\ john smith,ou=people,dc=example,dc=com'
'does not strip an escaped trailing space in an attribute value'|'uid=John Smith\\ ,ou=People,dc=example,dc=com'|'uid=john smith\\ ,ou=people,dc=example,dc=com'
'does not strip an escaped leading newline in an attribute value'|'uid=\\\nJohn Smith,ou=People,dc=example,dc=com'|'uid=\\\njohn smith,ou=people,dc=example,dc=com'
'does not strip an unescaped leading newline (actually an invalid DN)'|'uid=\nJohn Smith,ou=People,dc=example,dc=com'|'uid=\njohn smith,ou=people,dc=example,dc=com'
'does not strip an unescaped trailing newline (actually an invalid DN)'|'uid=John Smith\n ,ou=People,dc=example,dc=com'|'uid=john smith\n,ou=people,dc=example,dc=com'
'hex-escapes and does not strip an escaped trailing newline in an attribute value'|"uid=John Smith\\\n,ou=People,dc=example,dc=com"|"uid=john smith\\0a,ou=people,dc=example,dc=com"
'converts an escaped hex comma to an escaped comma in an attribute value'|'uid= John C. Smith, ou=San Francisco\\2C CA'|'uid=john c. smith,ou=san francisco\\, ca'
'does not modify an escaped hex carriage return character in an attribute value'|'uid= John C. Smith, ou=San Francisco\\,\\0DCA'|'uid=john c. smith,ou=san francisco\\,\\0dca'
'does not modify an escaped hex line feed character in an attribute value'|'uid= John C. Smith, ou=San Francisco\\,\\0ACA'|'uid=john c. smith,ou=san francisco\\,\\0aca'
'does not modify an escaped hex CRLF in an attribute value'|'uid= John C. Smith, ou=San Francisco\\,\\0D\\0ACA'|'uid=john c. smith,ou=san francisco\\,\\0d\\0aca'
'allows attribute type name OIDs'|'0.9.2342.19200300.100.1.25=Example,0.9.2342.19200300.100.1.25=Com'|'0.9.2342.19200300.100.1.25=example,0.9.2342.19200300.100.1.25=com'
'strips extraneous whitespace from attribute type name OIDs'|'0.9.2342.19200300.100.1.25 = Example, 0.9.2342.19200300.100.1.25 = Com'|'0.9.2342.19200300.100.1.25=example,0.9.2342.19200300.100.1.25=com'
context'when given a BER encoded attribute value with a space in it'do
let(:given){'0.9.2342.19200300.100.1.25=#aa aa'}
it'raises MalformedDnError'do
expect{subject}.toraise_error(Gitlab::LDAP::MalformedDnError,"Expected the end of an attribute value, but got \"a\"")
end
end
context'when given a BER encoded attribute value with a non-hex character in it'do
let(:given){'0.9.2342.19200300.100.1.25=#aaXaaa'}
it'raises MalformedDnError'do
expect{subject}.toraise_error(Gitlab::LDAP::MalformedDnError,"Expected the first character of a hex pair, but got \"x\"")
end
end
context'when given a BER encoded attribute value with a non-hex character in it'do
let(:given){'0.9.2342.19200300.100.1.25=#aaaYaa'}
it'raises MalformedDnError'do
expect{subject}.toraise_error(Gitlab::LDAP::MalformedDnError,"Expected the second character of a hex pair, but got \"y\"")
end
end
context'when given a hex pair with a non-hex character in it, inside double quotes'do
let(:given){'uid="Sebasti\\cX\\a1n"'}
it'raises MalformedDnError'do
expect{subject}.toraise_error(Gitlab::LDAP::MalformedDnError,"Expected the second character of a hex pair inside a double quoted value, but got \"x\"")