import java.util.Enumeration;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPObjectClassSchema;
import com.novell.ldap.LDAPSchema;
import com.novell.ldap.LDAPModification;
public class MakeContainer {
public static void main(String[] args)
{
if (args.length != 4) {
usage();
System.exit(0);
}
String ldapHost = args[0];
int ldapPort = Integer.parseInt(args[1]);
String loginDN = args[2];
String password = args[3];
int index, len;
String inetOrgPersonString = null, new_inetString = null;
String flag = "X-NDS_NOT_CONTAINER '1'";
LDAPConnection conn = new LDAPConnection();
BufferedReader inputBuffer =
new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("WARNING: THIS MODIFICATION IS NOT REVERSIBLE!"
+ "\nDo you want to continue?(N/Y)\n");
String input = inputBuffer.readLine();
if ( (!input.startsWith("y")) && (!input.startsWith("Y")) )
System.exit(0);
conn.connect( ldapHost, ldapPort );
conn.bind( LDAPConnection.LDAP_V3, loginDN,
password.getBytes("UTF8"));
LDAPSchema schema = conn.fetchSchema( conn.getSchemaDN() );
LDAPObjectClassSchema inetOrgPerson =
schema.getObjectClassSchema("inetOrgPerson");
inetOrgPersonString = inetOrgPerson.toString();
if (inetOrgPersonString == null) {
System.out.println("Could not find 'inetOrgPerson' object clsss"
+ " definition to modify");
conn.disconnect();
System.exit(0);
}
else if ((index = inetOrgPersonString.indexOf(flag)) == -1) {
System.out.println("X_NDS_NOT_CONTAINER flag not persent."
+ "\n'inetOrgPerson' is already a container");
conn.disconnect();
System.exit(0);
}
else {
String tail = inetOrgPersonString.substring(index + flag.length());
String newDefinition = inetOrgPersonString.substring(0, index);
newDefinition += tail;
LDAPObjectClassSchema new_inetOrgPerson =
new LDAPObjectClassSchema(newDefinition);
LDAPModification modify[] = new LDAPModification[2];
modify[0] = new LDAPModification(LDAPModification.DELETE,
inetOrgPerson);
modify[1] = new LDAPModification(LDAPModification.ADD,
new_inetOrgPerson);
conn.modify( conn.getSchemaDN(), modify );
System.out.println("'inetOrgPerson' object class was modified"
+ " to be a container object class.");
}
conn.disconnect();
}
catch(IOException ie) {
System.out.println("IO Error: " + ie.toString());
System.exit(1);
}
catch(LDAPException le) {
System.out.println( "LDAP Error: " + le.toString() );
System.exit(1);
}
catch( Exception e ) {
System.out.println( "Error: " + e.toString() );
System.exit(1);
}
System.exit(0);
}
public static void usage()
{
System.out.println("Usage: java MakeContainer <host name>"
+ " <port number> <login dn> <password>");
System.out.println("Example: java MakeContainer Acme.com 389 "
+ "cn=admin,o=Acme secret");
}
}