2011-04-20 114 views
4

當我嘗試屬性添加到通過PHP了OpenDS我得到以下錯誤:ldap_add():地址:Object類的違規錯誤

ldap_add(): Add: Object class violation

請幫助。

這裏是我的代碼

<?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'] = "[email protected]"; 
    $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

請提供一些代碼。當您嘗試將某些屬性設置爲不屬於設置了屬性的類的對象時,可能會引發此錯誤...在LDAP中,您的對象必須是memberOf具有此屬性的類。 – shadyyx 2011-04-20 10:06:20

+0

感謝您的回覆我修改了我的帖子請看它 – 2011-04-20 10:15:37

回答

5

嗯,它看起來像您正在嘗試只設置objectclassinetOrgPerson,但你也必須設置從哪個inetorgPerson正在擴大其他上層階級 - 這將是topperson也許......

所以:

$ldaprecord['cn'] = "roshan1"; 
$ldaprecord['givenName'] = "mkljl"; 
$ldaprecord['sn'] = "roshan"; 
$ldaprecord['objectclass'][0] = "top"; 
$ldaprecord['objectclass'][1] = "person"; 
$ldaprecord['objectclass'][2] = "inetOrgPerson"; 
$ldaprecord['mail'] = "[email protected]"; 
$ldaprecord['mmmm'] = "77878"; 
+0

它不是問題的問題是當我添加$ ldaprecord ['mmmm'] =「77878」;此代碼行錯誤即將到來如何添加像 – 2011-04-20 10:25:02

+1

這樣的附加屬性好,所以這可能是因爲此屬性未在LDAP中的任何類中實現...嘗試使用inetOrgPerson的一些現有屬性...嘗試查看此處:http://oav.net/mirrors/LDAP-ObjectClasses.html – shadyyx 2011-04-20 10:38:18

+0

感謝您的回覆是否有任何posibity創建我自己的屬性inetOrgPerson類 – 2011-04-20 10:45:56