警告:ldap_add():添加:对象类违规

时间:2016-06-04 15:22:37

标签: php ldap phpldapadmin

在过去的几天里,我一直在努力了解有关ldap的更多信息,现在我希望能够通过webform在我的phpldapadmin服务器上创建一个新帐户。我正确地通过PHP传递值,但我不断收到objectclass violation错误。我已经搜索了许多不同的资源(including this one),基本上我能找到的是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,但仍然没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

看起来您需要确保通过每个值。我错过了$(".slider-value", ui.draggable).html(val); uidnumbergivenname字段。但现在它有效! :)

答案 1 :(得分:0)

在LDAP中创建条目时,您需要知道哪些属性是"必须" (必需)用于创建条目时使用的ObjectClasses。

在你的例子中: 人必须(sn $ cn) posixAccount必须(cn $ uid $ uidNumber $ gidNumber $ homeDirectory)

因此,要在LDAP中创建条目,您必须拥有所有这些条目的值:

  • SN
  • cn
  • uid
  • uidNumber
  • 的gidNumber
  • homeDirectory的

你可以告诉LDAP Query For Schema需要哪一个并阅读每个ObjectClass以确定哪些属性是"必须" (所需的)。