Добавить запись 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'
));

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

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.

15.12.2008 16:05:17
2 ОТВЕТА
РЕШЕНИЕ

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

2
15.12.2008 21:41:15
Привет Мартин! Большое спасибо - это была проблема ... Я не смею думать о времени, которое я потратил на это на стороне PHP ;-)
Stefan Gehrig 16.12.2008 07:59:44

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

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

0
15.12.2008 17:47:21
Ни ADSI Edit, ни ldp.exe не позволят мне добавить вспомогательный класс. Редактор ADSI сообщает «Die angegebene Methode wird nicht unterstützt» («Указанный метод не поддерживается»). ldp.exe говорит: «Ошибка: Изменить: Ausführung verweigert. [...]
Stefan Gehrig 15.12.2008 20:57:09
[...] <53> Ошибка сервера: 00002040: SvcErr: DSID-030F0AA0, проблема 5003 (WILL_NOT_PERFORM), данные 0 "Это то же самое, даже если я авторизован как администратор домена.
Stefan Gehrig 15.12.2008 20:57:59
Хм. Какой сервер? Я использовал W2k3SP2, и он работал нормально.
Martin v. Löwis 15.12.2008 21:33:17