Добавить запись LDAP в Active Directory через ext / ldap

Используя ext / ldap, я пытаюсь добавить записи в Active Directory. Пока я использую только один структурный объектный класс, все работает должным образом, но как только я пытаюсь добавить запись со вторым вспомогательным объектным классом, сервер сообщает об ошибке:

Сервер не желает работать; 00002040: SvcErr: DSID-030F0AA0, проблема 5003 (WILL_NOT_PERFORM), данные 0

Следующий код работает:

ldap_add($ldap, 'OU=Test,OU=Test,DC=domain,DC=example,DC=local', array(
    'ou' => 'Test',
    'objectClass' => 'organizationalUnit',
    'l' => 'location'
));

Это не так:

ldap_add($ldap, 'OU=Test,OU=Test,DC=domain,DC=example,DC=local', array(
    'ou' => 'Test',
    'associatedDomain' => 'domain',
    'objectClass' => array('organizationalUnit', 'domainRelatedObject'),
    'l' => 'location'
));

То же самое происходит, если я пытаюсь добавить вспомогательный объектный класс к существующей записи:

ldap_mod_add($ldap, 'OU=Test,OU=Test,DC=domain,DC=example,DC=local', array(
    'associatedDomain' => 'domain',
    'objectClass' => 'domainRelatedObject'
));

Соответствующее сообщение об ошибке по сути то же самое

Сервер не желает работать; 00002040: SvcErr: DSID-030508F8, проблема 5003 (WILL_NOT_PERFORM), данные 0

Поскольку все остальные операции обновления и добавления работают, я думаю, проблема должна быть связана с атрибутом objectClass.

Поскольку у меня недостаточно опыта работы с Active Directory (я привык к OpenLDAP): есть ли какие-либо известные проблемы с объектными классами в Active Directory? Я что-то упустил? Существуют ли какие-либо ограничения, запрещающие добавление, например, domainRelatedObject на organizationalUnit? Что, черт возьми, здесь происходит ;-)?

На всякий случай, если вам интересно: domainRelatedObject присутствует в схеме Active Directory.


person Stefan Gehrig    schedule 15.12.2008    source источник


Ответы (2)


Я только что обнаружил, что для добавления динамических (для каждого экземпляра) вспомогательных классов Лесной функциональный уровень домена должен быть 2003.

person Martin v. Löwis    schedule 15.12.2008
comment
Привет, Мартин! Большое спасибо - это была проблема ... Я не смею думать о времени, которое я потратил на это на стороне PHP ;-) - person Stefan Gehrig; 16.12.2008

Возможно, у вас нет разрешения на установку атрибута objectClass. Посмотрите, можете ли вы присоединить вспомогательный класс после создания, с помощью ADSI Edit. . Если вы не можете, сначала исправьте разрешения (проверьте вкладку «Свойства» в расширенном представлении настроек безопасности).

Я мог бы прямо сейчас присоединить этот конкретный класс к объекту organizationUnit как администратор домена; так что в принципе это возможно.

person Martin v. Löwis    schedule 15.12.2008
comment
Ни ADSI Edit, ни ldp.exe не позволят мне добавить вспомогательный класс. В редакторе ADSI указано «Die angegebene Methode wird nicht unterstützt» (указанный метод не поддерживается). ldp.exe говорит: Ошибка: Изменить: Ausführung verweigert. [...] - person Stefan Gehrig; 15.12.2008
comment
[...] ‹53› Ошибка сервера: 00002040: SvcErr: DSID-030F0AA0, проблема 5003 (WILL_NOT_PERFORM), данные 0 Это то же самое, даже если я аутентифицирован как администратор домена. - person Stefan Gehrig; 15.12.2008
comment
Хм. Что за сервер? Я использовал W2k3SP2, и он работал нормально. - person Martin v. Löwis; 16.12.2008