我编写了代码来在LDAP模式中添加对象类。它适用于SunOne目录服务。但是在OpenLdap的情况下它给出“InvalidAttributeValueException”,在IBM TDS的情况下给出“OperationNotSupportedException”。有没有人知道这3个目录服务的通用代码。
我的代码:
包演示;
import javax.naming。; import javax.naming.directory。; import java.util.Hashtable;
public class AddObjectClass {
public static void main(String args[])
{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,"ldap://localhost:389");
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
env.put(Context.SECURITY_CREDENTIALS,"cantsay");
Attributes attrs = new BasicAttributes(true); // ignore case
attrs.put("NUMERICOID", "1.3.6.1.4.1.42.2.27.4.2.3.1.1.45");
attrs.put("NAME", "myObjectClass");
attrs.put("DESC", "for JNDI example only");
attrs.put("SUP", "top");
attrs.put("STRUCTURAL", "true");
Attribute must = new BasicAttribute("MUST", "cn");
must.add("objectclass");
attrs.put(must);
try
{
DirContext ctx = new InitialDirContext(env);
DirContext schema = ctx.getSchema("");
schema.createSubcontext("ClassDefinition/myObjectClass", attrs);
System.out.println("added");
ctx.close();
}catch(Exception e){e.printStackTrace();}
}
}
答案 0 :(得分:0)
这是答案的开头。在LDAP V3 RFC上,记录了架构是动态的。这是您在 Sun one 中使用的内容。我在带有LDIF文件的 Active-Directory 中做了同样的事情。但是有一个技巧,你可以添加加载新属性,并在加载类之前在一个特殊属性中“重新加载模式”。
我只想告诉您,动态功能并不总是存在于所有LDAP V3目录中。当它存在时,它不是那么标准。
我无法谈论IBM TDS。但我确信,即使OpenLDAP能够支持动态模式,我使用的大多数分发都是在slapd启动期间加载的文本模式编译的。这些文本文件位于/ etc / openldap / schema /中。您必须重新启动deamon slapd才能使用新架构。
对于OpenLDAP,可能看看here
This article讨论了IBM TDS上的动态模式。
我希望它有所帮助。
JP