/*
* RHQ Management Platform
* Copyright (C) 2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.server.test.ldap;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import javax.naming.Binding;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NameClassPair;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.ExtendedRequest;
import javax.naming.ldap.ExtendedResponse;
import javax.naming.ldap.LdapContext;
import org.rhq.enterprise.server.resource.group.LDAPStringUtil;
/**
* A fake implementation of {@link LdapContext} which can be used for LDAP
* unit testing.
*
* @author loleary
*
*/
public class FakeLdapContext implements LdapContext {
FakeLdapContext.LdapSearchTestData ldapTestData = new LdapSearchTestData();
@Override
public NamingEnumeration<SearchResult> search(String name, String filter, SearchControls cons)
throws NamingException {
Hashtable<String, String> attributes = new Hashtable<String, String>();
if (name != null && name.length() > 0) {
attributes.put("baseName", name);
}
/*
* simple parse of filter
* We treat everything like an &
* We do not handle wildcards
*/
if (filter != null) {
int idxLP = -1; // Left Parenthesis
int idxEq = -1; // Equal sign
int idxRP = -1; // Right Parenthesis
while (idxLP < filter.length() && idxRP < filter.length()) {
idxLP = filter.indexOf('(', idxLP + 1);
if (idxLP > -1 && idxLP + 1 < filter.length()) {
if (filter.charAt(idxLP + 1) == '&') {
idxLP++;
continue;
}
idxEq = filter.indexOf('=', idxLP + 1);
}
if (idxEq > -1 && idxEq + 1 < filter.length())
idxRP = filter.indexOf(')', idxEq + 1);
if (idxLP > -1 && idxEq > idxLP && idxRP > idxEq) {
String attrName = filter.substring(idxLP + 1, idxEq);
String attrValue = filter.substring(idxEq + 1, idxRP);
attributes.put(attrName, attrValue);
} else {
idxRP = filter.length();
}
}
}
try {
return new FakeNamingEnumeration<SearchResult>(ldapTestData.getSearchResults(attributes));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public FakeLdapContext() throws NamingException {
super();
//System.out.println("------------------------------------------------");
//System.out.println(FakeLdapContext.class.getCanonicalName() + " initialized");
//System.out.println("------------------------------------------------");
}
@Override
public void bind(Name arg0, Object arg1, Attributes arg2) throws NamingException {
}
@Override
public void bind(String arg0, Object arg1, Attributes arg2) throws NamingException {
}
@Override
public DirContext createSubcontext(Name arg0, Attributes arg1) throws NamingException {
return null;
}
@Override
public DirContext createSubcontext(String arg0, Attributes arg1) throws NamingException {
return null;
}
@Override
public Attributes getAttributes(Name arg0) throws NamingException {
return null;
}
@Override
public Attributes getAttributes(String arg0) throws NamingException {
return null;
}
@Override
public Attributes getAttributes(Name arg0, String[] arg1) throws NamingException {
return null;
}
@Override
public Attributes getAttributes(String arg0, String[] arg1) throws NamingException {
return null;
}
@Override
public DirContext getSchema(Name arg0) throws NamingException {
return null;
}
@Override
public DirContext getSchema(String arg0) throws NamingException {
return null;
}
@Override
public DirContext getSchemaClassDefinition(Name arg0) throws NamingException {
return null;
}
@Override
public DirContext getSchemaClassDefinition(String arg0) throws NamingException {
return null;
}
@Override
public void modifyAttributes(Name arg0, ModificationItem[] arg1) throws NamingException {
}
@Override
public void modifyAttributes(String arg0, ModificationItem[] arg1) throws NamingException {
}
@Override
public void modifyAttributes(Name arg0, int arg1, Attributes arg2) throws NamingException {
}
@Override
public void modifyAttributes(String arg0, int arg1, Attributes arg2) throws NamingException {
}
@Override
public void rebind(Name arg0, Object arg1, Attributes arg2) throws NamingException {
}
@Override
public void rebind(String arg0, Object arg1, Attributes arg2) throws NamingException {
}
@Override
public NamingEnumeration<SearchResult> search(Name arg0, Attributes arg1) throws NamingException {
return null;
}
@Override
public NamingEnumeration<SearchResult> search(String arg0, Attributes arg1) throws NamingException {
return null;
}
@Override
public NamingEnumeration<SearchResult> search(Name arg0, Attributes arg1, String[] arg2) throws NamingException {
return null;
}
@Override
public NamingEnumeration<SearchResult> search(String arg0, Attributes arg1, String[] arg2) throws NamingException {
return null;
}
@Override
public NamingEnumeration<SearchResult> search(Name arg0, String arg1, SearchControls arg2) throws NamingException {
return null;
}
@Override
public NamingEnumeration<SearchResult> search(Name arg0, String arg1, Object[] arg2, SearchControls arg3)
throws NamingException {
return null;
}
@Override
public NamingEnumeration<SearchResult> search(String arg0, String arg1, Object[] arg2, SearchControls arg3)
throws NamingException {
return null;
}
@Override
public Object addToEnvironment(String arg0, Object arg1) throws NamingException {
return null;
}
@Override
public void bind(Name arg0, Object arg1) throws NamingException {
}
@Override
public void bind(String arg0, Object arg1) throws NamingException {
}
@Override
public void close() throws NamingException {
}
@Override
public Name composeName(Name arg0, Name arg1) throws NamingException {
return null;
}
@Override
public String composeName(String arg0, String arg1) throws NamingException {
return null;
}
@Override
public Context createSubcontext(Name arg0) throws NamingException {
return null;
}
@Override
public Context createSubcontext(String arg0) throws NamingException {
return null;
}
@Override
public void destroySubcontext(Name arg0) throws NamingException {
}
@Override
public void destroySubcontext(String arg0) throws NamingException {
}
@Override
public Hashtable<?, ?> getEnvironment() throws NamingException {
return null;
}
@Override
public String getNameInNamespace() throws NamingException {
return null;
}
@Override
public NameParser getNameParser(Name arg0) throws NamingException {
return null;
}
@Override
public NameParser getNameParser(String arg0) throws NamingException {
return null;
}
@Override
public NamingEnumeration<NameClassPair> list(Name arg0) throws NamingException {
return null;
}
@Override
public NamingEnumeration<NameClassPair> list(String arg0) throws NamingException {
return null;
}
@Override
public NamingEnumeration<Binding> listBindings(Name arg0) throws NamingException {
return null;
}
@Override
public NamingEnumeration<Binding> listBindings(String arg0) throws NamingException {
return null;
}
@Override
public Object lookup(Name arg0) throws NamingException {
return null;
}
@Override
public Object lookup(String arg0) throws NamingException {
return null;
}
@Override
public Object lookupLink(Name arg0) throws NamingException {
return null;
}
@Override
public Object lookupLink(String arg0) throws NamingException {
return null;
}
@Override
public void rebind(Name arg0, Object arg1) throws NamingException {
}
@Override
public void rebind(String arg0, Object arg1) throws NamingException {
}
@Override
public Object removeFromEnvironment(String arg0) throws NamingException {
return null;
}
@Override
public void rename(Name arg0, Name arg1) throws NamingException {
}
@Override
public void rename(String arg0, String arg1) throws NamingException {
}
@Override
public void unbind(Name arg0) throws NamingException {
}
@Override
public void unbind(String arg0) throws NamingException {
}
@Override
public ExtendedResponse extendedOperation(ExtendedRequest arg0) throws NamingException {
return null;
}
@Override
public Control[] getConnectControls() throws NamingException {
return null;
}
@Override
public Control[] getRequestControls() throws NamingException {
return null;
}
@Override
public Control[] getResponseControls() throws NamingException {
return null;
}
@Override
public LdapContext newInstance(Control[] arg0) throws NamingException {
return null;
}
@Override
public void reconnect(Control[] arg0) throws NamingException {
}
@Override
public void setRequestControls(Control[] arg0) throws NamingException {
}
/**
* Test data that is returned as LDAP search results based on simple queries.
*
* @author loleary
*
*/
public class LdapSearchTestData extends ArrayList<SearchResult> {
private static final long serialVersionUID = -1751409714032152844L;
public LdapSearchTestData() {
super();
Attribute attr = null;
Attributes attrs = null;
SearchResult sr = null;
// dn: dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("dcObject");
attr.add("organization");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("dc");
attr.add("test-rhq");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("Test directory for RHQ from Red Hat, Inc. Directory should contain entries that can be used to test LDAP integration between RHQ Server and a compatible LDAP server implementation. ");
attrs.put(attr);
attr = new BasicAttribute("o");
attr.add("Test RHQ directory");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("dc=test,dc=rhq,dc=redhat,dc=com", null, null, attrs, true);
this.add(sr);
// dn: ou=groups,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalUnit");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("groups");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("All groups which can be used for testing RHQ role/group mappings.");
attrs.put(attr);
sr = new SearchResult("groups", null, null, attrs, true);
this.add(sr);
// dn: ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalUnit");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("people");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("All users which can be used for testing RHQ user authentication and authorizations.");
attrs.put(attr);
sr = new SearchResult("people", null, null, attrs, true);
this.add(sr);
// dn: cn=RHQ Admin Group,ou=groups,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("groupOfNames");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("RHQ administrators group");
attrs.put(attr);
attr = new BasicAttribute("member");
attr.add("cn=Robert Smith,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Cannon\\, Brett,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Charles H\\Samlin,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Craig \\#1 Sellers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Beverly \\+1 Balanger,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Bethany \\<Stuart\\> Wallace,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Zachory S\\; Balanger,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Allen \"The Hammer\" Callen,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Sam Not \\= Smitherson,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=\\ Billy The Kiddough\\ ,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=System/Integration API,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Lee -Fast- Croutche,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Samantha *Won't Quit* Jeopardy,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Brad (The Eagle) Strafford,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Michal M\u011Bchura,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
sr = new SearchResult("RHQ Admin Group", null, null, attrs, true);
this.add(sr);
// dn: cn=JBoss Admin Group,ou=groups,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("groupOfNames");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("Group that administers and manages JBoss servers and applications");
attrs.put(attr);
attr = new BasicAttribute("member");
attr.add("cn=John Smith,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Dr. Greg Hause\\, MD,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Cindy\\Cynthia Groober,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Biff \\# Rogers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Steven \\+2 Reed,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Lisa \\<The Great\\> Toller,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Homer J Simpsonite\\; III,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Jessica \"Crouching Tiger\" Mathers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Hope \\= Rein,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=\\ Sue Ferguson\\ ,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Phil/Susan Carlson,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Sally -Ainte- Mathers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Lee *Fast* Croutche,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Kimberly (Six Toe) Krawford,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=We\u00F1dy Sequerl,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
sr = new SearchResult("JBoss Admin Group", null, null, attrs, true);
this.add(sr);
// dn: cn=JBoss Monitor Group,ou=groups,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("groupOfNames");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("Group that monitors JBoss servers and applications");
attrs.put(attr);
attr = new BasicAttribute("member");
attr.add("cn=Sheri Smith,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Walsh\\, Brad,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Jim\\James Kirk,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Sandra \\# Phillips,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=William Tell Overture \\+1,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Craig \\<Bison\\> Allen,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Walter T Fredrick\\; The Second,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Stanley \"Short\" Mein,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Noah \\= Sadler,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=\\ Stuart Smiley\\ ,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=System/Integration API 2,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Samantha -Won't Quit- Jeopardy,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Sally *Ainte* Mathers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Jeff (Top Hat) Wilbright,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attr.add("cn=Phillip Br\u00E3dy,ou=users,dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
sr = new SearchResult("JBoss Monitor Group", null, null, attrs, true);
this.add(sr);
// dn "cn=Robert Smith,ou=users,dc=test,dc=rhq,dc=redhat,dc=com"
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("rjosmith");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Smith");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("robert.smith@rhq.redhat.com");
attr.add("bob.smith@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-111-2222");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Robert Smith");
attr.add("Robert J Smith");
attr.add("Bob Smith");
attrs.put(attr);
attr = new BasicAttribute("telephonenumber");
attr.add("555-555-1212");
attr.add("212");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("swell guy");
attr.add("Simple user in the RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("carlicense");
attr.add("HISCAR 123");
attrs.put(attr);
sr = new SearchResult("cn=Robert Smith,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=John Smith,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("John Smith");
attr.add("John J Smith");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Smith");
attrs.put(attr);
attr = new BasicAttribute("carlicense");
attr.add("HISCAR 124");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-111-2223");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("j.smith@rhq.redhat.com");
attr.add("jsmith@rhq.redhat.com");
attr.add("john.smith@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("jsmith");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("Simple user in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=John Smith,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Sheri Smith,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Sheri Smith");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Smith");
attrs.put(attr);
attr = new BasicAttribute("carlicense");
attr.add("HERCAR 125");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-111-2225");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("s.smith@rhq.redhat.com");
attr.add("ssmith@rhq.redhat.com");
attr.add("sheri.smith@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("ssmith");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("Simple user in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Sheri Smith,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Cannon\, Brett,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Cannon, Brett");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Cannon");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1212");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("bcannon@rhq.redhat.com");
attr.add("brett.cannon@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("bcannon");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with comma (,) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Cannon\\, Brett,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Dr. Greg Hause\, MD,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Dr. Greg Hause, MD");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Hause");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-2155");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("ghause@rhq.redhat.com");
attr.add("dr.feel.good@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("ghause");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with comma (,) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Dr. Greg Hause\\, MD,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Walsh\, Brad,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Walsh, Brad");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Walsh");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1215");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("bwalsh@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("bwalsh");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with comma (,) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Walsh\\, Brad,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Charles H\\Samlin,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Charles H\\Samlin");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("H\\Samlin");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1213");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("csamlin@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("csamlin");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with backslash (\\) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Charles H\\Samlin,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Cindy\\Cynthia Groober,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Cindy\\Cynthia Groober");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Groober");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1214");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("cgroober@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("cgroober");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with backslash (\\) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Cindy\\Cynthia Groober,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Jim\\James Kirk,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Jim\\James Kirk");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Kirk");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1215");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("jkirk@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("jkirk");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with backslash (\\) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Jim\\James Kirk,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Craig \#1 Sellers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Craig #1 Sellers");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Sellers");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1216");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("csellers@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("csellers");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with hash-sign (#) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Craig \\#1 Sellers,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Biff \# Rogers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Biff # Rogers");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Rogers");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1217");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("brogers@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("brogers");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with hash-sign (#) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Biff \\# Rogers,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Sandra \# Phillips,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Sandra \\# Phillips");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Phillips");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1218");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("sphillips@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("sphillips");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with hash-sign (#) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Sandra \\# Phillips,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Beverly \+1 Balanger,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Beverly +1 Balanger");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Balanger");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1219");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("bbalanger@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("bbalanger");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with plus-sign (+) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Beverly \\+1 Balanger,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Steven \+2 Reed,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Steven +2 Reed");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Reed");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1220");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("sreed@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("sreed");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with plus-sign (+) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Steven \\+2 Reed,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=William Tell Overture \+1,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("William Tell Overture +1");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Overture");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1221");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("woverture@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("woverture");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with plus-sign (+) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=William Tell Overture \\+1,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Bethany \<Stuart\> Wallace,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Bethany <Stuart> Wallace");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Wallace");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1222");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("bwallace@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("bwallace");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with less-than and greater-than sign (<>) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Bethany \\<Stuart\\> Wallace,ou=users", "javax.naming.directory.DirContext",
null, attrs, true);
this.add(sr);
// dn: cn=Lisa \<The Great\> Toller,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Lisa <The Great> Toller");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Toller");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1223");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("ltoller@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("ltoller");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with less-than and greater-than sign (<>) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Lisa \\<The Great\\> Toller,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Craig \<Bison\> Allen,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Craig <Bison> Allen");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Allen");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1224");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("callen@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("callen");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with less-than and greater-than sign (<>) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Craig \\<Bison\\> Allen,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Zachory S\; Balanger,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Zachory S; Balanger");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Balanger");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1225");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("zbalanger@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("zbalanger");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with semi-colon (;) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Zachory S\\; Balanger,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Homer J Simpsonite\; III,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Homer J Simpsonite; III");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Simpsonite");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1226");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("hsimpsonite@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("hsimpsonite");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with semi-colon (;) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Homer J Simpsonite\\; III,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Walter T Fredrick\; The Second,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Walter T Fredrick; The Second");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Fredrick");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1227");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("wfredrick@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("wfredrick");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with semi-colon (;) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Walter T Fredrick\\; The Second,ou=users", "javax.naming.directory.DirContext",
null, attrs, true);
this.add(sr);
// dn: cn=Allen "The Hammer" Callen,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Allen \"The Hammer\" Callen");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Callen");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1228");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("acallen@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("acallen");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with quote (\") in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Allen \"The Hammer\" Callen,ou=users", "javax.naming.directory.DirContext",
null, attrs, true);
this.add(sr);
// dn: cn=Jessica "Crouching Tiger" Mathers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Jessica \"Crouching Tiger\" Mathers");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Simpsonite");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1229");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("jmathers@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("jmathers");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with quote (\") in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Jessica \"Crouching Tiger\" Mathers,ou=users",
"javax.naming.directory.DirContext", null, attrs, true);
this.add(sr);
// dn: cn=Stanley "Short" Mein,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Stanley \"Short\" Mein");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Mein");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1230");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("smein@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("smein");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with quote (\") in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Stanley \"Short\" Mein,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Sam Not \= Smitherson,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Sam Not = Smitherson");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Smitherson");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1231");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("ssmitherson@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("ssmitherson");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with equal-sign (=) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Sam Not \\= Smitherson,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Hope \= Rein,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Hope = Rein");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Rein");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1232");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("hrein@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("hrein");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with equal-sign (=) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Hope \\= Rein,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Noah \= Sadler,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Noah = Sadler");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Sadler");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1233");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("nsadler@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("nsadler");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with equal-sign (=) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Noah \\= Sadler,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=\ Billy The Kiddough\ ,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add(" Billy The Kiddough ");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Kiddough");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1234");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("bkiddough@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("bkiddough");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with leading and trailing space ( ) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=\\ Billy The Kiddough\\ ,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=\ Sue Ferguson\ ,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add(" Sue Ferguson ");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Ferguson");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1235");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("sferguson@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("sferguson");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with leading and trailing space ( ) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=\\ Sue Ferguson\\ ,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=\ Stuart Smiley\ ,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add(" Stuart Smiley ");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Smiley");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1236");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("ssmiley@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("ssmiley");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with leading and trailing space ( ) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=\\ Stuart Smiley\\ ,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=System/Integration API,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("System/Integration API");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("API");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("sysapi@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("sysapi");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with slash (/) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=System\\/Integration API,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Phil/Susan Carlson,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Phil/Susan Carlson");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Carlson");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1238");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("pscarlson@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("pscarlson");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with slash (/) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Phil\\/Susan Carlson,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=System/Integration API 2,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("System/Integration API 2");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("API");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("sysapi2@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("sysapi2");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with slash (/) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=System\\/Integration API 2,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Lee -Fast- Croutche,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Lee -Fast- Croutche");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Croutche");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1243");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("lecroutche@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("lecroutche");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with hyphen (-) in 'cn', not to be confused with user with similar name in JBoss Admin Group, in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Lee -Fast- Croutche,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Sally -Ainte- Mathers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Sally -Ainte- Mathers");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Mathers");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1244");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("samathers@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("samathers");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with hyphen (-) in 'cn', not to be confused with user with similar name in JBoss Monitor Group, in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Sally -Ainte- Mathers,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Samantha -Won't Quit- Jeopardy,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Samantha -Won't Quit- Jeopardy");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Jeopardy");
attrs.put(attr);
attr = new BasicAttribute("gn");
attr.add("Samantha");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1245");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("sajeopardy@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("sajeopardy");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with hyphen (-) in 'cn', not to be confused with user with similar name in RHQ Admin Group, in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Samantha -Won't Quit- Jeopardy,ou=users", "javax.naming.directory.DirContext",
null, attrs, true);
this.add(sr);
// dn: cn=Samantha *Won't Quit* Jeopardy,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Samantha *Won't Quit* Jeopardy");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Jeopardy");
attrs.put(attr);
attr = new BasicAttribute("gn");
attr.add("Samantha");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1246");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("sjeopardy@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("sjeopardy");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with asterisk (*) in 'cn', not to be confused with user with similar name in JBoss Monitor Group, in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Samantha *Won't Quit* Jeopardy,ou=users", "javax.naming.directory.DirContext",
null, attrs, true);
this.add(sr);
// dn: cn=Lee *Fast* Croutche,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Lee *Fast* Croutche");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Croutche");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1247");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("lcroutche@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("lcroutche");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with asterisk (*) in 'cn', not to be confused with user with similar name in RHQ Admin Group, in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Lee *Fast* Croutche,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Sally *Ainte* Mathers,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Sally *Ainte* Mathers");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Mathers");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1248");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("smathers@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("smathers");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with asterisk (*) in 'cn', not to be confused with user with similar name in JBoss Admin Group, in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Sally *Ainte* Mathers,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Brad (The Eagle) Strafford,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Brad (The Eagle) Strafford");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Strafford");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1249");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("bstrafford@rhq.redhat.com");
attr.add("the.eagle@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("bstrafford");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with parenthesis () in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Brad (The Eagle) Strafford,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Kimberly (Six Toe) Krawford,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Kimberly (Six Toe) Krawford");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Krawford");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1250");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("kkrawford@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("kkrawford");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with parenthesis () in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Kimberly (Six Toe) Krawford,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Jeff (Top Hat) Wilbright,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Jeff (Top Hat) Wilbright");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Wilbright");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-555-1251");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("jwilbright@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("jwilbright");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with parenthesis () in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Jeff (Top Hat) Wilbright,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Michal Měchura,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Michal Měchura");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("M\u011Bchura");
attrs.put(attr);
attr = new BasicAttribute("gn");
attr.add("Michal");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-777-1212");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("mmechura@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("mmechura");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("RHQ Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with non-ASCII character (\u011B) in 'cn' in the RHQ Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=Michal M\u011Bchura,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Weñdy Sequerl,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("We\u00F1dy Sequerl");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Sequerl");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-777-1213");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("wsequerl@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("wsequerl");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Admin Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with non-ASCII character (\u00F1) in 'cn' in the JBoss Admin Group");
attrs.put(attr);
sr = new SearchResult("cn=We\u00F1dy Sequerl,ou=users", null, null, attrs, true);
this.add(sr);
// dn: cn=Phillip Brãdy,ou=users,dc=test,dc=rhq,dc=redhat,dc=com
attrs = new BasicAttributes();
attr = new BasicAttribute("baseName");
attr.add("dc=test,dc=rhq,dc=redhat,dc=com");
attrs.put(attr);
attr = new BasicAttribute("objectClass");
attr.add("organizationalPerson");
attr.add("person");
attr.add("inetOrgPerson");
attr.add("top");
attrs.put(attr);
attr = new BasicAttribute("cn");
attr.add("Phillip Br\u00E3dy");
attrs.put(attr);
attr = new BasicAttribute("sn");
attr.add("Br\u00E3dy");
attrs.put(attr);
attr = new BasicAttribute("homephone");
attr.add("555-777-1214");
attrs.put(attr);
attr = new BasicAttribute("mail");
attr.add("pbrady@rhq.redhat.com");
attrs.put(attr);
attr = new BasicAttribute("uid");
attr.add("pbrady");
attrs.put(attr);
attr = new BasicAttribute("userpassword");
attr.add("cmVkaGF0");
attrs.put(attr);
attr = new BasicAttribute("ou");
attr.add("JBoss Monitor Group");
attrs.put(attr);
attr = new BasicAttribute("description");
attr.add("User with non-ASCII character (\u00E3) in 'cn' in the JBoss Monitor Group");
attrs.put(attr);
sr = new SearchResult("cn=Phillip Br\u00E3dy,ou=users", null, null, attrs, true);
this.add(sr);
}
/**
* Unescapes an LDAP search filter value. This is done by converting
* each occurance of \xx (where xx is a hex value) to its character
* reprentation. If xx is not a valid hex value, the \ is stripped from
* the result.
*
* @param value a value from an LDAP search filter
* @return unescaped value
* @throws Exception
*/
private String unescapeFilterValue(String value) {
boolean strip = false;
int i = 0, len = value.length();
char c;
StringBuffer sb = new StringBuffer(len);
while (i < len) {
c = value.charAt(i++);
if (c == '\\') {
if (i + 2 < len) {
try {
c = (char) Integer.parseInt(value.substring(i, i + 2), 16);
} catch (NumberFormatException nfe) {
strip = true;
}
if (!strip)
i += 2;
}
} // fall through: \ escapes itself, quotes any character but u
if (!strip)
sb.append(c);
strip = false;
}
return sb.toString();
}
/**
* Query the test data for an LDAP entry using a simple query. The
* simple query is defined by a {@link Hashtable} which represents the
* required attributes and their values. Each LDAP entry that satisifies
* all the attributes and value contained in <code>attrSet</code> are
* returned.
*
* @param attrSet The attributes and values that an LDAP entry must have
* to satisfy the query
* @return A {@link List} of 0 or more {@link SearchResult} LDAP entries
* which satisified the query
* @throws NamingException
*/
public List<SearchResult> getSearchResults(Hashtable<String, String> attrSet) throws NamingException {
List<SearchResult> list = new ArrayList<SearchResult>();
int matchCount, keyCount;
boolean match;
for (SearchResult sr : this) {
matchCount = 0;
keyCount = 0;
Attributes attrs = sr.getAttributes();
Enumeration<String> keye = attrSet.keys();
while (keye.hasMoreElements()) {
match = false;
String searchAttrName = (String) keye.nextElement();
Attribute attrib = attrs.get(searchAttrName);
if (attrib != null) {
for (Enumeration<?> vals = attrib.getAll(); vals.hasMoreElements();) {
String value = (String) vals.nextElement();
String utf8Value = new String(unescapeFilterValue(LDAPStringUtil.encodeForFilter(value)));
match = utf8Value.equalsIgnoreCase(unescapeFilterValue(attrSet.get(searchAttrName)));
if (match) {
break;
}
}
}
if (match)
matchCount++;
keyCount++;
}
if (matchCount > 0 && matchCount == keyCount) {
list.add(sr);
}
}
return list;
}
}
}