Как определить объектный класс o и ou в схеме сервера каталогов LDAP?

Вопрос 1:

Я использую встроенный сервер LDAP Apache 2.0. Я вижу проблемы при запуске службы. Что может быть не так?

Сообщение об ошибке:

09:40:43.657 [main] ERROR o.a.d.a.l.m.entry.DefaultAttribute - ERR_04487_ATTRIBUTE_IS_SINGLE_VALUED The attribute 'dc' is single valued, we cant add no more values into it
09:40:43.658 [main] WARN  o.a.d.s.c.n.NormalizationInterceptor - The Rdn 'dc=example' is not present in the entry
Exception in thread "main" org.apache.directory.api.ldap.model.exception.LdapException: ERR_04269 OBJECT_CLASS for OID ou does not exist!
    at org.apache.directory.api.ldap.model.schema.registries.DefaultSchemaObjectRegistry.lookup(DefaultSchemaObjectRegistry.java:176)
    at org.apache.directory.api.ldap.schemamanager.impl.DefaultSchemaManager.lookupObjectClassRegistry(DefaultSchemaManager.java:1656)

Код Java:

Partition examplePartition = addPartition("example", "dc=example,dc=com");

// Index some attributes on the apache partition
addIndex(examplePartition, "objectClass", "ou", "uid");

    // And start the service
service.startup();

// Inject the context entry for dc=foo,dc=com partition if it does not already exist
try {
  service.getAdminSession().lookup(examplePartition.getSuffixDn());
}
catch (LdapException lnnfe) {
  Dn dn = new Dn("dc=example,dc=com");
  Entry entry = service.newEntry(dn);
  entry("objectClass", "top", "domain", "extensibleObject", "ou", "o", "mail");
  entry("dc", "example", "com");
  // entry("ou", "people");
  // entry("o", "exampleinc");
  service.getAdminSession().add(entry);
}

Вопрос 2: После запуска службы я хотел бы импортировать файл ldif. Является ли мой файл правильным? Нужно ли устанавливать OU и O и в файле или это нужно устанавливать в сервисном коде? Любой пример?

ldif-файл:

dn: ou=people,dc=example,dc=com
ou: people
objectclass: top
objectclass: organizationalUnit

dn: o=exampleinc,dc=example,dc=com
o: exampleinc
objectclass: top
objectclass: organization

dn: cn=some guy,ou=people,o=exampleinc,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
CN: some guy
sn: some_guy
givenName: someguy
name: some guy
uid: some_guy
mail: [email protected]

person DaBears    schedule 28.10.2013    source источник


Ответы (3)


Для второго вопроса вы можете попробовать:

dn: ou=people,dc=example,dc=com
ou: people
objectclass: top
objectclass: organizationalUnit

dn: ou=exampleinc,ou=people,dc=example,dc=com
ou: exampleinc
objectclass: top
objectclass: organization

dn: cn=some guy,ou=exampleinc,ou=people,dc=example,dc=com
person FelasDroid    schedule 01.11.2013

Я думаю, что ваша проблема в этой строке: entry("dc", "example", "com");

Как отмечает ошибка, оно не является многозначным.

Без понятия о синтаксисе, но я думаю, что это может быть больше похоже на: entry("dc", "dc=example,dc=com");

или иначе

entry("dc", "example.com");

person geoffc    schedule 28.10.2013

я думаю, вам нужен отдельный вызов entry() для каждого компонента:

entry("dc", "example");
entry("dc", "com");
person pkmk    schedule 06.01.2014