import java.util.Enumeration;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.LdapContext;
import javax.naming.ldap.InitialLdapContext;
public class SearchControl {
public static void main(String[] args) {
if (args.length != 4) {
usage();
}
String hostURL = args[0];
String loginDN = args[1];
String password = args[2];
String searchBase = args[3];
int scope = 2;
int timeLimit = 1000;
long countLimit = 1000;
String returnedAttributes[]= {"cn", "sn", "mail", "telephoneNumber"};
boolean returnObject= false;
boolean deference = false;
System.out.println(
"\nCall SearchControl constructor to set search constraints...");
SearchControls constraints = new SearchControls( scope,
countLimit,
timeLimit,
returnedAttributes,
returnObject,
deference );
System.out.println(
"Call SearchControl APIs to set search constraints again...");
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
constraints.setTimeLimit( 2000 );
constraints.setDerefLinkFlag( false );
constraints.setReturningObjFlag( false );
constraints.setCountLimit( 1001 );
constraints.setReturningAttributes( returnedAttributes );
System.out.println( "Call SearchControl APIs to display search"
+"contraints");
System.out.println( "Search scope: " + constraints.getSearchScope());
System.out.println( "Time limit : " + constraints.getTimeLimit());
System.out.println( "Deference link flag: "
+ constraints.getDerefLinkFlag());
System.out.println( "Returing object flag: "
+ constraints.getReturningObjFlag());
System.out.println( "Count limit: " + constraints.getCountLimit());
String returnedAttrs[] = constraints.getReturningAttributes();
for( int i=0;i < returnedAttrs.length; ++i )
System.out.println( returnedAttrs[i] );
try {
Hashtable env = new Hashtable(5, 0.75f);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory" );
env.put(Context.PROVIDER_URL, hostURL );
env.put(Context.SECURITY_AUTHENTICATION, "simple" );
env.put(Context.SECURITY_PRINCIPAL, loginDN );
env.put(Context.SECURITY_CREDENTIALS, password);
LdapContext ctx = new InitialLdapContext( env, null );
NamingEnumeration results = ctx.search(searchBase,
"objectclass=*",
constraints);
while (results != null && results.hasMore()) {
SearchResult nextEntry = ( SearchResult )results.next();
System.out.println("name: " + nextEntry.getName());
Attributes attributeSet = nextEntry.getAttributes();
if (attributeSet == null) {
System.out.println("No attributes returned");
}
else {
System.out.println( attributeSet );
for (NamingEnumeration allAttributes = attributeSet.getAll();
allAttributes.hasMoreElements(); ) {
Attribute attribute = (Attribute)allAttributes.next();
String attributeId = attribute.getID();
for ( Enumeration values = attribute.getAll();
values.hasMoreElements();
System.out.println(attributeId + ": "
+ values.nextElement()));
}
}
System.out.println();
}
}
catch (NamingException e) {
System.err.println("SearchControl example failed.");
e.printStackTrace();
}
finally {
System.exit(0);
}
}
public static void usage() {
System.err.println("\n Usage: java SearchControl <host URL> "
+ "<login dn> <password> <entry dn>"
+"\n <trustee dn>");
System.err.println("\n Example: java SearchControl ldap://Acme.com:389"
+ " \"cn=Admin,o=Acme\" secret \n "
+"\"ou=Sales,o=Acme\" ");
System.exit(1);
}
}