Hi, I'm testing API "JLDAP - LDAP Class Libraries will be Java" with the versionof the openldap 2.4.12. I configured openldap and executed theExtendSchema.java example then I got the following error: Error: LDAPException: Invalid Attribute Syntax (21) Invalid Attribute SyntaxLDAPException: Server Message: attributeTypes: value #0 invalid per syntaxLDAPException: Matched DN:at (Unknown Source)at (Unknown Source) The syntax generated for the API LDAPAttributeSchema is the following one:( 2.5.4.130 NAME 'cesmic' DESC 'testing' SYNTAX1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) Any idea on what's going on? Thank you very much~ I am looking for your reply~ Yours Tom
The ExtendSchema.java example is as follows ========================================================//Sample code file: var/ndk/webBuildengine/tmp/viewable_samples/f91a68eb-ad37-4526-92b1-b1938f37b871/ExtendSchema.java//Warning: This code has been marked up for HTML/******************************************************************************* * $Novell: ExtendSchema.java,v 1.12 2002/07/29 21:28:12 $ * Copyright (c) 2000, 2001 Novell, Inc. All Rights Reserved. * * THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND * TREATIES. USE AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO THE LICENSE * AGREEMENT ACCOMPANYING THE SOFTWARE DEVELOPMENT KIT (SDK) THAT CONTAINS * THIS WORK. PURSUANT TO THE SDK LICENSE AGREEMENT, NOVELL HEREBY GRANTS TO * DEVELOPER A ROYALTY-FREE, NON-EXCLUSIVE LICENSE TO INCLUDE NOVELL'S SAMPLE * CODE IN ITS PRODUCT. NOVELL GRANTS DEVELOPER WORLDWIDE DISTRIBUTION RIGHTS * TO MARKET, DISTRIBUTE, OR SELL NOVELL'S SAMPLE CODE AS A COMPONENT OF * DEVELOPER'S PRODUCTS. NOVELL SHALL HAVE NO OBLIGATIONS TO DEVELOPER OR * DEVELOPER'S CUSTOMERS WITH RESPECT TO THIS CODE. * * $name: ExtendSchema.java * $description: ExtendSchema.java demonstrates how to extend directory schema. * It is used to add a new attribute definition, a * new effective object class definition, and a new auxiliary * class definition to the directory schema . Then it adds a * test objec to the directory and add the new auxiliary class * to the test object to show how to apply an auxiliary class to * the test object. * To extend directory schema, the user must have Admin * equivalent rights. Novell recommend that users use ICE and * ldif file ( Import, Conversion, and Export ) to modify schema * instead of embedding schema extension commands within program * files. ******************************************************************************/ import com.novell.ldap.*; import java.io.UnsupportedEncodingException;
public class ExtendSchema {
// Create a new LDAPAttributeSchema object static LDAPAttributeSchema newAttrType = new LDAPAttributeSchema( new String[] {"testAttribute"}, // name of the new attr "2.16.840.1.113719.1.186.4.1", // OID of the new attr "Test attr definition", // desc of the new attr "1.3.6.1.4.1.1466.115.121.1.15" , // case-ignore string false, // not single-valued null, // no super attr type false, // not obsolete null, // no equality matching null, // no ordering matching null, // no substring matching false, // not a collective attr true, // user modifiable attr LDAPAttributeSchema.USER_APPLICATIONS)// user applications
// Create a new effective class object static LDAPObjectClassSchema newObjClass = new LDAPObjectClassSchema( new String[] {"testClass"}, // name of the new obj class "2.16.840.1.113719.1.186.6.1", // OID of effective class new String [] {"top"}, // 'top' is super class "Test class definition", // optional description new String [] {"cn", "title"}, // required attribute(s) null, // optional attribute(s) LDAPObjectClassSchema.STRUCTURAL, // effective class false); // not obsolete
// Create a new auxiliary class object static LDAPObjectClassSchema newAuxClass = new LDAPObjectClassSchema( new String[] {"testAuxClass"}, // name of the new obj class "2.16.840.1.113719.1.186.6.2", // OID of this auxiliary class new String [] {"top"}, // 'top' is super class "Test auxilliary class definition", // optional description null, // required attribute(s) new String [] {"testAttribute"}, // optional attribute LDAPObjectClassSchema.AUXILIARY, // auxiliary class false); // not obsolete
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();
// Add Novell eDirectory specific flags for attribute definition newAttrType.setQualifier( "X-NDS_PUBLIC_READ", new String [] {"1"}); newAttrType.setQualifier( "X-NDS_NOT_SCHED_SYNC_IMMEDIATE", new String [] {"1"}); // Add Novell eDirectory specific flags for object class definition newObjClass.setQualifier( "X-NDS_NAMING", new String [] {"cn"}); newObjClass.setQualifier( "X-NDS_CONTAINMENT", new String [] {"organization", "organizationalUnit", "domain", "locality", "treeRoot"});
try { // connect to the server conn.connect( ldapHost, ldapPort ); // bind to the server conn.bind( ldapVersion, loginDN, password.getBytes("UTF8") );
/* * Adding schema extensions includes: * 1. add a new attribute definition to directory schema * 2. add a new object class definition to directory schema * 3. add a new auxiliary class definition to directory schema */ System.out.println( "\tAdding test schema extensions..."); // add schema extensions if ( extendSchema( conn ) ) { // add a test object to the directory tree if ( addTestObject( conn, testObjDN ) ) { // add the auxiliary class to the test object addAuxClassToTestObj( conn, testObjDN ); } }
/* * Removing schema extensions consists of: * 1. remove auxiliary class definition from schema * 2. remove object class definition from schema * 3. remove attribute definition from schema */ // remove auxiliary class from test object if ( removeAuxClassFromTestObj( conn, testObjDN ) ) { // remove test object if ( removeTestObj( conn, testObjDN ) ) { System.out.println( "\tRemoving test schema extensions..."); unExtendSchema( conn ); } }
// disconnect with the server 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""); }
// add schema extensions public static boolean extendSchema( LDAPConnection conn ) { boolean status = true;
try { // Add attribute definition conn.modify( conn.getSchemaDN(), new LDAPModification(LDAPModification.ADD, newAttrType));
System.out.println("\tAdded attribute schema extensions successfully");
// Add object definitions 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; }
// remove schema extensions public static boolean unExtendSchema( LDAPConnection conn ) { boolean status = true;
try { // Remove auxiliary class definition // Add attribute definition 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; }
// add test object 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; }
// remove test object 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; }
// add auxiliary class to test object 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; }
// remove auxiliary class from test object 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; } } _________________________________________________________________ Hotmail has tools for the New Busy. Search, chat and e-mail from your inbox. http://www.windowslive.com/campaign/thenewbusy?ocid=PID28326::T:WLMTAGL:ON:W...