1

我有一些 c 代码可以根据用户 cn 在 openldap 服务器中查询用户 DN,如下所示。当我使用 Apache DS 搜索 ldap 服务器时,只显示结果。然而,我的 C 代码返回 2 条记录;一个具有预期用户的 DN,第二个记录具有空白 DN!第二张唱片是干什么用的?这是预期的行为吗?

为了清楚起见,我已包含下面的代码示例,并删除了所有错误检查。

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

1

做了一些更多的故障排除,我发现有两种方法:

> int ldap_count_entries( LDAP *ld, LDAPMessage *result );  => returns 1
> int ldap_count_messages( LDAP *ld, LDAPMessage *result ); => returns 2

现在,我不完全确定“条目”和“消息”之间的区别是什么,但至少它部分解决了这个谜团。

于 2013-06-26T16:36:24.250 回答
0

ldap_count_entries及其相关例程 (ldap_first_entryldap_next_entry) 仅返回条目,即您的搜索结果。

ldap_count_messages(和ldap_first_message, ldap_next_message)还包括搜索引用,即对其他服务器或命名上下文的引用。

来源。我发现旧的 Mozilla LDAP 文档对于解释 LDAP 概念非常有用。

于 2013-08-22T21:04:49.693 回答