1

以下に示すように、ユーザー cn に基づいてユーザー DN を openldap サーバーに照会する C コードがいくつかあります。Apache DS を使用して LDAP サーバーを検索すると、結果のみが表示されます。ただし、私の C コードは 2 つのレコードを返します。1 つは予想どおりユーザーの DN で、2 番目のレコードは空白の DN です!! この 2 番目のレコードは何のためですか? これは予想される動作ですか?

わかりやすくするために、すべてのエラー チェックを削除したコード サンプルを以下に示します。

ldap_search_ext(ld, (char *)baseDN, LDAP_SCOPE_SUBTREE, "(&(objectClass=person)(cn=test00002))", NULL, 0, NULL, NULL, NULL, LDAP_NO_LIMIT, &msgid);
ldap_result(ld, msgid, 1, NULL, &res);
numUsersFound = ldap_count_messages(ld, res);
syslog(LOG_DEBUG, "DEBUG Number of users found: (%d)", numUsersFound);

結果

DEBUG Number of users found: 2
DEBUG User DN: (cn=test00002,ou=defaultRealm,dc=company,dc=com)
DEBUG User DN: ()
4

2 に答える 2

0

ldap_count_entriesおよびその関連ルーチン (ldap_first_entryおよびldap_next_entry) は、エントリ、つまり検索結果のみを返します。

ldap_count_messages(およびldap_first_messageldap_next_message) には、検索参照、つまり、他のサーバーまたはネーミング コンテキストへの参照も含まれます。

ソース。LDAP の概念を説明するには、古い Mozilla LDAP ドキュメントが非常に役立つことがわかりました。

于 2013-08-22T21:04:49.693 に答える