Предупреждение: ldap_add (): Добавить: нарушение класса объекта

В последние несколько дней я пытался узнать больше о ldap, и теперь я хотел бы иметь возможность создать новую учетную запись на моем сервере phpldapadmin из веб-формы. У меня есть значения, которые передаются обратно через php правильно, но я продолжаю получать objectclass violation ошибка. Я искал много разных ресурсов (в том числе этот) и в основном все, что я могу найти, это то, что objectclass должен точно соответствовать настройке словаря. Я запустил экспорт для некоторых созданных вручную пользователей, в которых я уже успешно работал, и это пример вывода:

# LDIF Export for cn=api user,cn=students,ou=users,dc=myhost,dc=com
# Server: LDAP (ip)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 1
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on June 4,     2016 3:15 pm
# Version: 1.2.2

version: 1

# Entry 1: cn=api user,cn=students,ou=users,dc=myhost,dc=co...
dn: cn=test user,cn=students,ou=users,dc=myhost,dc=com
cn: test
gidnumber: 502
givenname: test
homedirectory: /home/users/testuser
loginshell: /bin/sh
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: tuser
uid: testuser
uidnumber: 1003
userpassword: {MD5}pass==

и я попытался воспроизвести его как можно точнее в моем сценарии (ниже), но я все еще получаю ошибку нарушения. Нет проблем с подключением или с любым другим полем, только objectclass проблема.

  $ds = ldap_connect($AD_server);
if ($ds) {

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
$r = ldap_bind($ds, $AD_Auth_User, $AD_Auth_PWD);
$info["cn"] = $user_full_name;
$info["sn"] = $user_username;
$info['objectclass'][0] = "top";
$info['objectclass'][1] = "posixAccount";
$info['objectclass'][2] = "inetOrgPerson";
$info['uid'] = $user_username;
$info['userpassword'] = $newPassw;
$info['loginshell'] = '/bin/sh';
$info['homedirectory'] = "/home/users/$user_username";

// add data to directory
$r = ldap_add($ds, $dn, $info);

ldap_close($ds);
} else {
echo "Unable to connect to LDAP server";
}

Я поиграл с объектными классами и попытался поменять их положение или используя только inetOrgPersonи до сих пор не повезло. Какие-нибудь мысли?

1

Решение

Похоже, вам нужно обязательно пройти каждое значение обратно через. Я скучал по uidnumber givenname а также gidnumber поля. Но теперь это работает! 🙂

0

Другие решения

При создании записей в LDAP необходимо знать, какие атрибуты «ОБЯЗАНЫ» (обязательные) для классов объектов, используемых при создании записи.

В вашем примере:
человек ДОЛЖЕН (sn $ cn)
posixAccount ДОЛЖЕН (cn $ uid $ uidNumber $ gidNumber $ homeDirectory)

Поэтому, чтобы создать запись в LDAP, вы ДОЛЖНЫ иметь значения для всех этих:

  • зп
  • сп
  • UID
  • uidNumber
  • gidNumber
  • HomeDirectory

Вы можете сказать, что требуется от LDAP-запрос для схемы и чтение каждого ObjectClass, чтобы определить, какие атрибуты «ДОЛЖНЫ» (обязательно).

0

По вопросам рекламы [email protected]