import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import com.novell.ldap.*;
import com.novell.ldap.controls.*;
import java.io.UnsupportedEncodingException;
public class EffectivePrivilegesControlSample {
public static void main(String[] args) {
if (args.length != 4) {
System.err.println("Usage: java EffectivePrivilegesControlSample <host name> "
+ "<login dn> <password> <container>");
System.err.println("Example: java EffectivePrivilegesControlSample 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];
int ldapPort = LDAPConnection.DEFAULT_PORT;
int ldapVersion = LDAPConnection.LDAP_V3;
String searchFilter = "(objectclass=*)";
LDAPConnection lc = new LDAPConnection();
try {
lc.connect(ldapHost, ldapPort);
lc.bind(ldapVersion, loginDN, password.getBytes("UTF8"));
LDAPEffectivePrivilegesSelection selection1, selection2;
ArrayList selections = new ArrayList();
selection1 = new LDAPEffectivePrivilegesSelection("cn", null);
selection2 = new LDAPEffectivePrivilegesSelection(null, "inetorgperson");
selections.add(selection1);
selections.add(selection2);
LDAPEffectivePrivilegesControl effControl =
new LDAPEffectivePrivilegesControl(
true,
false,
selections);
LDAPSearchConstraints cons = lc.getSearchConstraints();
cons.setControls(effControl);
lc.setConstraints(cons);
System.out.println("\nCalling search request...");
LDAPSearchResults res = lc.search(searchBase,
LDAPConnection.SCOPE_SUB, searchFilter, null,
false, cons);
while (res.hasMore()) {
LDAPEntry nextEntry;
try {
nextEntry = res.next();
} catch (LDAPException e) {
if(e.getResultCode() == 12)
System.out.println("This critical control is not supported..");
if (e instanceof LDAPReferralException)
continue;
else
break;
}
System.out.println();
System.out.println("Entry dn: " + nextEntry.getDN());
LDAPAttributeSet findAttrs = nextEntry.getAttributeSet();
Iterator enumAttrs = findAttrs.iterator();
System.out.println("Attribute(s):");
while (enumAttrs.hasNext()) {
LDAPAttribute anAttr = (LDAPAttribute) enumAttrs.next();
String attrName = anAttr.getName();
Enumeration enumVals = anAttr.getStringValues();
while (enumVals.hasMoreElements()) {
String aVal = (String) enumVals.nextElement();
System.out.println(" " + attrName + ": " + aVal);
}
}
}
if (lc.isConnected())
lc.disconnect();
} catch (LDAPException e) {
System.out.println(e.toString());
} catch (UnsupportedEncodingException e) {
System.out.println("Error: " + e.toString());
}
}
}