1

ここ数日、私は ldap についてもっと学ぼうとしてきましたが、Web フォームから 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";
    }

私は objectclasses をいじって、それらの位置を切り替えたり、 のみを使用しようとしましたがinetOrgPerson、まだ運がありません。何かご意見は?

4

2 に答える 2

2

LDAP 内でエントリを作成する場合、エントリの作成時に使用される ObjectClasses に対してどの属性が「MUST」(必須) であるかを知る必要があります。

あなたの例では: person MUST ( sn $ cn ) posixAccount MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )

したがって、LDAP でエントリを作成するには、これらすべての値が必要です。

  • スン
  • cn
  • イド
  • uid番号
  • gid番号
  • ホームディレクトリ

LDAP Query For Schemaと各 ObjectClass を読み取って、どの属性が「MUST」(必須) であるかを判断することで、どれが必要かを判断できます。

于 2016-06-05T12:14:09.487 に答える