import com.novell.ldap.*;
import java.io.UnsupportedEncodingException;
public class ExtendSchema
{
static LDAPAttributeSchema newAttrType = new LDAPAttributeSchema(
new String[] {"testAttribute"},
"2.16.840.1.113719.1.186.4.1",
"Test attr definition",
"1.3.6.1.4.1.1466.115.121.1.15" ,
false,
null,
false,
null,
null,
null,
false,
true,
LDAPAttributeSchema.USER_APPLICATIONS)
static LDAPObjectClassSchema newObjClass = new LDAPObjectClassSchema(
new String[] {"testClass"},
"2.16.840.1.113719.1.186.6.1",
new String [] {"top"},
"Test class definition",
new String [] {"cn", "title"},
null,
LDAPObjectClassSchema.STRUCTURAL,
false);
static LDAPObjectClassSchema newAuxClass = new LDAPObjectClassSchema(
new String[] {"testAuxClass"},
"2.16.840.1.113719.1.186.6.2",
new String [] {"top"},
"Test auxilliary class definition",
null,
new String [] {"testAttribute"},
LDAPObjectClassSchema.AUXILIARY,
false);
public static void main( String[] args )
{
if (args.length != 4) {
usage();
System.exit(1);
}
int ldapPort = LDAPConnection.DEFAULT_PORT;
int ldapVersion = LDAPConnection.LDAP_V3;
String ldapHost = args[0];
String loginDN = args[1];
String password = args[2];
String testObjDN = "cn=testObject," + args[3];
LDAPConnection conn = new LDAPConnection();
newAttrType.setQualifier( "X-NDS_PUBLIC_READ", new String [] {"1"});
newAttrType.setQualifier( "X-NDS_NOT_SCHED_SYNC_IMMEDIATE",
new String [] {"1"});
newObjClass.setQualifier( "X-NDS_NAMING", new String [] {"cn"});
newObjClass.setQualifier( "X-NDS_CONTAINMENT", new String []
{"organization", "organizationalUnit", "domain", "locality",
"treeRoot"});
try {
conn.connect( ldapHost, ldapPort );
conn.bind( ldapVersion, loginDN, password.getBytes("UTF8") );
System.out.println( "\tAdding test schema extensions...");
if ( extendSchema( conn ) ) {
if ( addTestObject( conn, testObjDN ) ) {
addAuxClassToTestObj( conn, testObjDN );
}
}
if ( removeAuxClassFromTestObj( conn, testObjDN ) ) {
if ( removeTestObj( conn, testObjDN ) ) {
System.out.println( "\tRemoving test schema extensions...");
unExtendSchema( conn );
}
}
conn.disconnect();
}
catch( LDAPException e ) {
System.out.println( "Error: " + e.toString() );
}
catch( UnsupportedEncodingException e) {
System.out.println( "Error: " + e.toString() );
}
System.exit(0);
}
public static void usage() {
System.err.println("Usage: java ExtendSchema <host name>"
+ " <login dn> <password> <test container DN>");
System.err.println("Example: java ExtendSchema Acme.com"
+ " \"cn=admin,o=Acme\" secret \"o=Acme\"");
}
public static boolean extendSchema( LDAPConnection conn ) {
boolean status = true;
try {
conn.modify( conn.getSchemaDN(),
new LDAPModification(LDAPModification.ADD, newAttrType));
System.out.println("\tAdded attribute schema extensions successfully");
LDAPModification[] modifications = new LDAPModification[2];
modifications[0] =
new LDAPModification(LDAPModification.ADD, newObjClass);
modifications[1] =
new LDAPModification(LDAPModification.ADD, newAuxClass);
conn.modify( conn.getSchemaDN(), modifications );
System.out.println( "\tAdded object schema extensions successfully.");
}
catch( LDAPException e ) {
System.out.println( "\tFailed to add schema extensions.");
System.out.println( "Error: " + e.toString() );
status = false;
}
return status;
}
public static boolean unExtendSchema( LDAPConnection conn ) {
boolean status = true;
try {
LDAPModification[] modifications = new LDAPModification[2];
modifications[1] =
new LDAPModification(LDAPModification.DELETE, newAuxClass);
modifications[0] =
new LDAPModification(LDAPModification.DELETE, newObjClass);
conn.modify( conn.getSchemaDN(), modifications);
System.out.println(
"\tSuccessfully removed the object schema extensions");
conn.modify( conn.getSchemaDN(),
new LDAPModification(LDAPModification.DELETE, newAttrType));
System.out.println(
"\tSuccessfully removed the attribute schema extensions");
}
catch( LDAPException e ) {
System.out.println( "\tFailed to remove the schema extensions." );
System.out.println( "Error: " + e.toString() );
status = false;
}
return status;
}
public static boolean addTestObject( LDAPConnection conn, String dn ) {
boolean status = true;
LDAPAttribute attribute = null;
LDAPAttributeSet attributeSet = new LDAPAttributeSet();
attribute = new LDAPAttribute("objectclass",new String []{"testClass"});
attributeSet.add( attribute );
attribute = new LDAPAttribute( "cn", new String []{ "testObject",
"Test Object" });
attributeSet.add( attribute );
attribute = new LDAPAttribute( "title", new String []{ "testManager",
"Test Manager" });
attributeSet.add( attribute );
LDAPEntry newEntry = new LDAPEntry( dn, attributeSet );
try {
conn.add( newEntry );
System.out.println( "\t\tAdded test object successfully.");
}
catch( LDAPException e ) {
System.out.println( "\t\tFailed to add test object." );
System.out.println( "Error: " + e.toString() );
status = false;
}
return status;
}
public static boolean removeTestObj( LDAPConnection conn, String dn ) {
boolean status = true;
try {
conn.delete( dn );
System.out.println("\t\tRemoved test object successfully.");
}
catch( LDAPException e ) {
System.out.println("Failed to remove test object." );
System.out.println( "Error: " + e.toString() );
status = false;
}
return status;
}
public static boolean addAuxClassToTestObj( LDAPConnection conn, String dn ) {
boolean status = true;
LDAPModification[] mods = new LDAPModification[2];
LDAPAttribute testAuxClass = new LDAPAttribute( "objectclass",
"testAuxClass" );
mods[0] = new LDAPModification( LDAPModification.ADD, testAuxClass);
LDAPAttribute testAttr = new LDAPAttribute("testAttribute", "pagerUser");
mods[1] = new LDAPModification( LDAPModification.ADD, testAttr) ;
try {
conn.modify( dn, mods);
System.out.println( "\t\tAdded auxiliary class to" +
" test object successfully.");
}
catch( LDAPException e ) {
System.out.println( "\t\tFailed to add auxiliary" +
" class to test object.");
System.out.println( "Error: " + e.toString() );
status = false;
}
return status;
}
public static boolean removeAuxClassFromTestObj( LDAPConnection conn, String dn ) {
boolean status = true;
LDAPModification[] mods = new LDAPModification[2];
LDAPAttribute testAuxClass = new LDAPAttribute( "objectclass",
"testAuxClass" );
mods[0] = new LDAPModification( LDAPModification.DELETE, testAuxClass);
LDAPAttribute testAttr = new LDAPAttribute("testAttribute", "pagerUser");
mods[1] = new LDAPModification( LDAPModification.DELETE, testAttr);
try {
conn.modify( dn, mods );
System.out.println( "\t\tRemoved auxiliary class from test" +
" object successfully.");
}
catch( LDAPException e ) {
System.out.println( "\t\tFailed to remove auxiliary class from" +
" test object." );
System.out.println( "Error: " + e.toString() );
status = false;
}
return status;
}
}