C 在OpenLDAP中进行分页ldap_搜索以绕过大小限制?
我们目前正在从一个过时的专有目录服务迁移到OpenLDAP。 今天,我们遇到了这样一个问题:如果当前搜索返回的条目数量达到某个限制,那么,或ldapsearch通常不会返回任何结果 不幸的是,在LDAP服务器配置中设置更高的大小限制可能会推迟问题的解决,因为我们有一个非常大的数据库,而且我们每天早上运行的更新机制必须执行大量查询 在MSDN文档中,我注意到有一种机制可以执行一个操作,这将允许我绕过大小限制。 很明显,这也在一份文件中有规定,但尚未最终确定(尚未确定) 无论如何,由于我没有在Windows Box上工作,我必须使用OpenLDAP API,它似乎没有提供这种机制(至少我在他们的应用程序上找不到) 这就引出了我的问题:你知道我能做些什么,以优雅的方式解决这个问题吗C 在OpenLDAP中进行分页ldap_搜索以绕过大小限制?,c,ldap,openldap,C,Ldap,Openldap,我们目前正在从一个过时的专有目录服务迁移到OpenLDAP。 今天,我们遇到了这样一个问题:如果当前搜索返回的条目数量达到某个限制,那么,或ldapsearch通常不会返回任何结果 不幸的是,在LDAP服务器配置中设置更高的大小限制可能会推迟问题的解决,因为我们有一个非常大的数据库,而且我们每天早上运行的更新机制必须执行大量查询 在MSDN文档中,我注意到有一种机制可以执行一个操作,这将允许我绕过大小限制。 很明显,这也在一份文件中有规定,但尚未最终确定(尚未确定) 无论如何,由于我没有在Win
谢谢你的帮助 使用AD或Novell的eDirectory?;) OpenLDAP支持通过
ldap\u create\u page\u控件()
和friends进行分页结果检索。是一个描述和示例代码。如果这对我没有帮助,我可能可以提供生产代码的摘录。我在使用ldap_create_page_控件和ldap_search_ext_s时遇到问题,默认情况下,我的ldap库实现使用的是ldap版本2,看起来版本3+支持它。在我将ldap设置为版本3之前,它从ldap_search_ext_s()返回“不受支持”。我可以使用
ldap_控件_paged_结果用于通过发送分页控件来启用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;
}
函数检索用户($conn)
{
$dn='ou=,dc=,dc=';
$filter=“(&(objectClass=user)(objectCategory=person)(sn=*)”;
$justthis=array();
//启用页面大小为100的分页。
$pageSize=100;
$cookie='';
做{
ldap_控制_分页_结果($conn,$pageSize,true,$cookie);
$result=ldap_search($conn、$dn、$filter、$justthis);
$entries=ldap\u get\u条目($conn,$result);
如果(!空($entries)){
对于($i=0;$i<$entries[“count”];$i++){
$data['usersLdap'][]=数组(
“名称”=>$entries[$i][“cn”][0],
'username'=>$entries[$i][“userprincipalname”][0]
);
}
}
ldap_控制_分页_结果_响应($conn,$result,$cookie);
}而($cookie!==null&&$cookie!='');
返回$data;
}
谢谢!我将在周一调查此事!(到目前为止,我只是放弃了这个话题,我们增加了查询限制…)我终于实现了它。它起作用了。非常感谢:)链接现在已断开。看起来它已移动到。所有类型的Active Directory(包括域控制器中使用的Active Directory,以及独立的Active Directory,如ADAM和AD LDS),通常每个请求返回1000个结果,因此如果您希望查询返回更多结果,您必须使用某种分页搜索:要么通过简单的分页结果控件,要么通过虚拟列表视图(VLV)控件。