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.