import java.util.Enumeration;
import java.util.Iterator;
import com.novell.ldap.*;
import com.novell.ldap.controls.*;
import java.io.UnsupportedEncodingException;
public class VLVControl {
public static void main( String[] args ) {
if (args.length != 4) {
System.err.println("Usage: java VLVControl <host name> <login dn>"
+ " <password> <container>");
System.err.println(
"Example: java VLVControl Acme.com \"cn=admin,o=Acme\" secret"
+ " \"ou=Sales,o=Acme\"");
System.exit(1);
}
String ldapHost = args[0];
String loginDN = args[1];
String password = args[2];
String searchBase = args[3];
String returnedAttributes[] = {"*", "+"};
String oid;
boolean attributeOnly = false;
boolean isSupported = false;
int ldapPort = LDAPConnection.DEFAULT_PORT;
int ldapVersion = LDAPConnection.LDAP_V3;
LDAPConnection lc = new LDAPConnection();
try {
lc.connect( ldapHost, ldapPort );
lc.bind( ldapVersion, loginDN, password.getBytes("UTF8") );
System.out.println( "Succesfully logged in to server: " + ldapHost);
LDAPSearchResults searchResults = lc.search(
"",
LDAPConnection.SCOPE_BASE,
"(objectclass=*)",
returnedAttributes,
attributeOnly );
LDAPEntry entry = null;
try {
entry = searchResults.next();
}
catch(LDAPException e) {
System.out.println("Error: " + e.toString());
}
LDAPAttributeSet attributeSet = entry.getAttributeSet();
Iterator allAttributes = attributeSet.iterator();
while(allAttributes.hasNext()) {
LDAPAttribute attribute = (LDAPAttribute)allAttributes.next();
String attrName = attribute.getName();
Enumeration allValues = attribute.getStringValues();
if( allValues != null) {
while(allValues.hasMoreElements()) {
if (attrName.equalsIgnoreCase("supportedControl")) {
oid = (String) allValues.nextElement();
if(oid.equalsIgnoreCase("2.16.840.1.113730.3.4.9")
||oid.equalsIgnoreCase("2.16.840.1.113730.3.4.10"))
isSupported = true;
}
else
allValues.nextElement();
}
}
}
if(isSupported == true) {
String MY_FILTER = "cn=*";
String[] attrs = new String[2];
attrs[0] = "givenname";
attrs[1] = "cn";
LDAPControl requestControls[] = new LDAPControl[2];
LDAPSortKey[] keys = new LDAPSortKey[1];
keys[0] = new LDAPSortKey( "cn" );
requestControls[0] = new LDAPSortControl( keys, true );
int beforeCount = 0;
int afterCount = 2;
requestControls[1] =
new LDAPVirtualListControl("a", beforeCount, afterCount);
LDAPSearchConstraints cons = lc.getSearchConstraints();
cons.setControls( requestControls );
lc.setConstraints(cons);
System.out.println( "Calling Asynchronous Search...");
LDAPSearchResults res = lc.search( searchBase,
LDAPConnection.SCOPE_SUB,
MY_FILTER,
attrs,
false,
(LDAPSearchConstraints) null );
while ( res.hasMore() ) {
LDAPEntry nextEntry;
try {
nextEntry = res.next();
}
catch(LDAPException e) {
if ( e instanceof LDAPReferralException)
continue;
else {
System.out.println("Search stopped with exception " +
e.toString());
break;
}
}
System.out.println();
System.out.println( nextEntry.getDN() );
LDAPAttributeSet findAttrs = nextEntry.getAttributeSet();
Iterator enumAttrs = findAttrs.iterator();
System.out.println( "Attributes: " );
while ( enumAttrs.hasNext() ) {
LDAPAttribute anAttr =
(LDAPAttribute)enumAttrs.next();
String attrName = anAttr.getName();
System.out.println( "" + attrName );
Enumeration enumVals = anAttr.getStringValues();
while ( enumVals.hasMoreElements() ) {
String aVal = ( String )enumVals.nextElement();
System.out.println( "" + aVal );
}
}
}
LDAPControl[] controls = res.getResponseControls();
if ( controls == null ) {
System.out.println( "No controls returned" );
} else {
for( int i = 0; i < controls.length; i++ ) {
if ( controls[i] instanceof LDAPSortResponse ) {
System.out.println("Received LDAP Sort Control from "
+ "Server");
String bad =
((LDAPSortResponse)controls[i]).getFailedAttribute();
int result =
((LDAPSortResponse)controls[i]).getResultCode();
System.out.println( "Error code: " + result );
if ( bad != null )
System.out.println( "Offending " + "attribute: "
+ bad );
else
System.out.println( "No offending " + "attribute "
+ "returned" );
}
if ( controls[i] instanceof LDAPVirtualListResponse ) {
System.out.println("Received VLV Response Control from "
+ "Server...");
int firstPosition = ((LDAPVirtualListResponse)
controls[i]).getFirstPosition();
int ContentCount = ((LDAPVirtualListResponse)
controls[i]).getContentCount();
int resultCode = ((LDAPVirtualListResponse)
controls[i]).getResultCode();
String context = ((LDAPVirtualListResponse)
controls[i]).getContext();
System.out.println( "Result Code => "
+ resultCode );
System.out.println( "First Position => "
+ firstPosition );
System.out.println( "Content Count => "
+ ContentCount );
if ( context != null )
System.out.println( "Context String => "+ context );
else
System.out.println( "No Context String in returned"
+ " control" );
}
}
}
if ( lc.isConnected() )
lc.disconnect();
}
else {
System.out.println("The Requested Server does not support the VLV Control.");
lc.disconnect();
System.exit(1);
}
}
catch( LDAPException e ) {
System.out.println( e.toString() );
}
catch( UnsupportedEncodingException e ) {
System.out.println( "Error: " + e.toString() );
}
}
}