ldap_add (): Добавить: Ошибка нарушения класса объекта - PullRequest
4 голосов
/ 20 апреля 2011

Когда я пытаюсь добавить атрибут в OpenDS через PHP, я получаю следующую ошибку:

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

Пожалуйста, помогите.

Вот мой код

<?php
$ldapconfig['host'] = 'PC100';
$ldapconfig['port'] = 1389;
$ldapconfig['basedn'] = 'dc=company,dc=com';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);

$password=1;
$username="cn=Directory Manager";

if ($bind=ldap_bind($ds, $username, $password)) {
  echo("Login correct");
  ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // IMPORTANT
  $dn = "cn=roshan1,dc=example,dc=com"; 
  //$newuser["objectclass"] = "inetOrgPerson"; 
  //$newuser["cn"] = "new1"; 
  //$newuser["sn"] = "user"; 

  $ldaprecord['cn'] = "roshan1";
  $ldaprecord['givenName'] = "mkljl";
  $ldaprecord['sn'] = "roshan";
  $ldaprecord['objectclass'] = "inetOrgPerson";    
  $ldaprecord['mail'] = "lkl@fh.com";
  $ldaprecord['mmmm'] = "77878";

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

} else {

  echo("Unable to bind to server.</br>");

}
?>

Если я удаляю $ldaprecord['mmmm'] = "77878"; из кода, он работает нормально. Как я могу добавить новый атрибут, как этот?

1 Ответ

7 голосов
/ 20 апреля 2011

Хм, похоже, вы пытаетесь установить objectclass на inetOrgPerson, но вам нужно установить и другие верхние классы, из которых inetorgPerson расширяется - это может быть top и person, может быть...

Итак:

$ldaprecord['cn'] = "roshan1";
$ldaprecord['givenName'] = "mkljl";
$ldaprecord['sn'] = "roshan";
$ldaprecord['objectclass'][0] = "top";
$ldaprecord['objectclass'][1] = "person";
$ldaprecord['objectclass'][2] = "inetOrgPerson";
$ldaprecord['mail'] = "lkl@fh.com";
$ldaprecord['mmmm'] = "77878";
...