Does anyone have any idea why a search using DirContents.search() would return duplicate records where no duplicates exist. Code below.
public Vector getListByName(String inName)
{
vecList = new Vector();
env= new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://lftdev01:389");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=rah,dc=sa,dc=gov,dc=au");
env.put(Context.SECURITY_CREDENTIALS, "secret");
try {
// Create the initial context
DirContext ctx = new InitialDirContext(env);
Attributes matchAttrs = new BasicAttributes(true); // ignore attribute name case
matchAttrs.put(new BasicAttribute("cn", inName));
String[] attrIDs = {"cn", "uid",};
SearchControls ctls = new SearchControls();
NamingEnumeration answer = ctx.search("ou=staff,dc=rah,dc=sa,dc=gov,dc=au", "cn=*"+inName+"*",ctls);
Vector tmpuid = new Vector();
Vector tmpcn = new Vector();
Attribute attr;
while (answer.hasMore())
{
SearchResult sr = (SearchResult)answer.next();
Attributes att = sr.getAttributes();
for (NamingEnumeration ae = att.getAll(); ae.hasMore()
{
attr = (Attribute)ae.next();
if(attr.getID().equals("uid"))
{
for (NamingEnumeration e = attr.getAll(); e.hasMore(); tmpuid.addElement(String.valueOf(e.next())));
}
else
if(attr.getID().equals("cn"))
{
for (NamingEnumeration e = attr.getAll(); e.hasMore(); tmpcn.addElement(String.valueOf(e.next())));
}
}
int i = 0;
while(i < tmpuid.size())
{
vecList.addElement(tmpuid.elementAt(i)+"|"+tmpcn.elementAt(i));
i++;
}
}
// Close the context when we're done
ctx.close();
} catch (NamingException e) {System.out.println("List failed: " + e);}
return vecList;
}
Thanks in advance,
Jeremy