ldaps_search超出了LDAP服务器的大小限制(MSAD)

时间:2019-05-30 08:59:01

标签: sas ldap

使用

call ldaps_search(handle,shandle,filter, attrs, num, rc);

使用Microsoft Active Directory我得到警告:超出了LDAP服务器的大小限制。

是否可以在sas中以某种方式翻页?

例如,我尝试使用sizeLimit = 2000的ldaps_setOptions,但仍会生成警告,因为我猜是在Microsoft方面设置的

谢谢

样本:

more = 1;
do while (more eq 1);
call ldaps_search_page(handle, shandle, filter, attrs, num, rc, more, 1000);
  if rc ne 0 then do;
 more = 0;
 msg = sysmsg();
 put msg;
  end;
/* free search results page */
if shandle NE 0 then do;
call ldaps_free(shandle,rc);
end;
end;

1 个答案:

答案 0 :(得分:1)

无法从客户端控制LDAP服务器的大小限制(请参见AD的MaxPageSize),但是是的,您仍然可以通过paging controls解决此问题。

这个想法是请求一个分页的结果集,每页的条目数少于服务器的MaxPageSize限制。

SAS提供了call ldaps_search_page例程,该例程只返回给定搜索请求的单个页面,并且需要后续调用来检索整个结果:

CALL LDAPS_SEARCH_PAGE(lHandle, sHandle, filter, attr, num, rc, more <, pageSize>);
     

pageSize (可选)指定一个正整数值,即   结果显示在输出页面上。默认情况下,此值设置为50。   pageSize为0,此功能就像关闭分页一样。这个   参数不区分大小写。

例如,如果查询与 n 个结果匹配(超出服务器端限制)并且页面大小设置为50,则您最多需要进行ceil(n/50)个调用。

这里是一个来自文档的示例,它在循环中使用more参数继续检索分页结果,直到没有更多信息可检索:

more = 1;
do while (more eq 1);
call ldaps_search_page(handle, shandle, filter, attrs, num, rc, more, 50);
...
/* free search results page */
  if shandle NE 0 then do;
  call ldaps_free(shandle,rc);
  end;
end;

https://documentation.sas.com/api/docsets/itechdsref/9.4/content/itechdsref.pdf


对于那些more停留在1从而导致上面的代码永久循环的人(我不知道为什么引用不会得到更新,但是OP在这种情况下),实际上您不这样做不需要它时,可以增加一个计数器直到提取的条目数达到 num 个。