我有一些 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: ()
最佳答案
做了一些更多的故障排除,我发现有两种方法:
> int ldap_count_entries( LDAP *ld, LDAPMessage *result ); => returns 1
> int ldap_count_messages( LDAP *ld, LDAPMessage *result ); => returns 2
现在,我不完全确定“条目”和“消息”之间有什么区别,但至少它部分地解决了这个谜团。
关于c - ldap_search_ext 返回额外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308223/