@Test
public void testSubstringSearchWithEscapedCharsInFilter() throws Exception
{
// Create entry cn=Sid Vicious, ou=system
Attributes vicious = LdifUtils.createJndiAttributes( "objectClass: top", "objectClass: person",
"cn: Sid Vicious",
"sn: Vicious", "description: (sex*pis\\tols)" );
DirContext ctx = sysRoot.createSubcontext( "cn=Sid Vicious", vicious );
assertNotNull( ctx );
ctx = ( DirContext ) sysRoot.lookup( "cn=Sid Vicious" );
assertNotNull( ctx );
Attributes attributes = ctx.getAttributes( "" );
assertEquals( "(sex*pis\\tols)", attributes.get( "description" ).get() );
// Now, search for the description
SearchControls controls = new SearchControls();
controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
controls.setDerefLinkFlag( false );
controls.setReturningAttributes( new String[]
{ "*" } );
sysRoot.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DAP_DEREF_ALIASES, AliasDerefMode.NEVER_DEREF_ALIASES
.getJndiValue() );
String[] filters = new String[]
{ "(description=*\\28*)", "(description=*\\29*)", "(description=*\\2A*)", "(description=*\\5C*)" };
for ( String filter : filters )
{
HashMap<String, Attributes> map = new HashMap<String, Attributes>();
NamingEnumeration<SearchResult> list = sysRoot.search( "", filter, controls );
while ( list.hasMore() )
{
SearchResult result = list.next();
map.put( result.getName(), result.getAttributes() );
}
list.close();
assertEquals( "Expected number of results returned was incorrect!", 1, map.size() );
Attributes attrs = map.get( "cn=Sid Vicious,ou=system" );
assertNotNull( attrs.get( "objectClass" ) );
assertNotNull( attrs.get( "cn" ) );
}
}