5

現在、古いプロプライエタリディレクトリサービスからOpenLDAPへの移行を進めています。今日、現在の検索で返されるエントリの数が特定の制限に達した場合、 ldap_search_ext_sまたはldapsearchは一般に結果を返さないという問題に遭遇しました。

残念ながら、LDAPサーバー構成でサイズ制限を高く設定すると、問題が延期される可能性があります。これは、非常に大きなデータベースがあり、毎朝実行される更新メカニズムが巨大なクエリを実行する必要があるためです。

MSDNのドキュメントで、ページ検索を実行するメカニズムがあることに気付きました。これにより、サイズの制限を回避できます。どうやらこれは1996年のRFCドラフトでも指定されていますが、まだ完成していませんか?

とにかく、私はWindows-Boxで作業していないので、OpenLDAP APIを使用する必要があります。これは、そのメカニズムを提供していないようです(少なくとも、検索ページで見つけることができませんでした) 。

それは私の質問に私をもたらします:あなたは私がその問題をエレガントな方法で解決するために何ができるかについての考えを持っていますか?

ご協力いただきありがとうございます!

4

4 に答える 4

1

OpenLDAPはldap_create_page_control ()、および友人を介したページ結果の取得をサポートしています。説明とサンプルコードは次のとおりですそれでも問題が解決しない場合は、本番コードからの抜粋を提供できる可能性があります。

于 2010-11-20T20:06:13.863 に答える
1

ldap_search_ext_sでldap_create_page_controlを使用する際に問題が発生しました。私のldapライブラリの実装はデフォルトでLDAPバージョン2を使用しており、バージョン3以降でサポートされているようです。LDAPをバージョン3に設定する前に、ldap_search_ext_s()から「サポートされていません」が返されていました。

于 2014-12-11T20:56:47.157 に答える
0

ldap_control_paged_resultを使用してサイズ制限を回避することができました

ldap_control_paged_resultは、ページング制御を送信することによってLDAPページングを有効にするために使用されます。私の場合、以下の関数は完全に機能しました。

    function retrieves_users($conn)
    {
        $dn        = 'ou=,dc=,dc=';
        $filter    = "(&(objectClass=user)(objectCategory=person)(sn=*))";
        $justthese = array();

        // enable pagination with a page size of 100.
        $pageSize = 100;

        $cookie = '';

        do {
            ldap_control_paged_result($conn, $pageSize, true, $cookie);

            $result  = ldap_search($conn, $dn, $filter, $justthese);
            $entries = ldap_get_entries($conn, $result);

            if(!empty($entries)){
                for ($i = 0; $i < $entries["count"]; $i++) {
                    $data['usersLdap'][] = array(
                            'name' => $entries[$i]["cn"][0],
                            'username' => $entries[$i]["userprincipalname"][0]
                    );
                }
            }
            ldap_control_paged_result_response($conn, $result, $cookie);

        } while($cookie !== null && $cookie != '');

        return $data;
    }
于 2016-12-29T16:05:51.747 に答える
-3

ADまたはNovellのeDirectoryを使用しますか?;)

于 2009-12-08T17:58:17.333 に答える