Hi, I'm testing API "JLDAP - LDAP Class Libraries will be Java" with the version of the openldap 2.4.12. I configured openldap and executed the ExtendSchema.java example then I got the following error: Error: LDAPException: Invalid Attribute Syntax (21) Invalid Attribute Syntax LDAPException: Server Message: attributeTypes: value #0 invalid per syntax LDAPException: 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' SYNTAX 1.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. Learn more. |