Добавить новый объектный класс в схему LDAP, используя JNDI - PullRequest
0 голосов
/ 25 марта 2011

Я написал код для добавления класса объекта в схему LDAP.Он отлично работает со службой каталогов SunOne.Но это дает "InvalidAttributeValueException" в случае OpenLdap и дает "OperationNotSupportedException" в случае IBM TDS.Кто-нибудь знает обобщенный код для этих 3 служб каталогов.

мой код:

демо-версия пакета;

import javax.naming. ;импорт javax.naming.directory. ;import java.util.Hashtable;

открытый класс 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();}

}

}

1 Ответ

0 голосов
/ 28 марта 2011

Вот начало ответа. В документах RFC LDAP V3 задокументировано, что схема является динамической. Это то, что вы используете в Sun one . Я делаю то же самое в Active-Directory с файлами LDIF. Но есть хитрость, которую вы добавляете для загрузки новых атрибутов и «перезагрузки схемы» с помощью специального атрибута перед загрузкой классов.

Я просто хочу сообщить вам, что динамическая функция не всегда присутствует во всех каталогах LDAP V3. А когда он присутствует, он не так уж стандартен.

Я не могу говорить о IBM TDS. Но я уверен, что даже если OpenLDAP способен поддерживать динамическую схему, большая часть дистрибутива, который я использовал, была скомпилирована с текстовой схемой, загруженной во время запуска slapd. Эти текстовые файлы находятся в / etc / openldap / schema /. И вы должны перезапустить deamon slapd, чтобы использовать новую схему.

Для OpenLDAP, возможно, посмотрите здесь

В этой статье говорится о динамической схеме в IBM TDS.

Надеюсь, это поможет.

JP

...