Превышен sizelimit сервера LDAP (MSAD) с помощью ldaps_search - PullRequest
1 голос
/ 30 мая 2019

используя

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

с Microsoft Active Directory, я получаю ВНИМАНИЕ: превышен sizelimit сервера LDAP.

есть ли способ как-то пролистать в sas?

я пробовал ldaps_setOptions с sizeLimit = 2000, например, но все еще генерирует предупреждение, так как я думаю, установлен на стороне 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 Ответ

1 голос
/ 30 мая 2019

Невозможно управлять sizelimit сервера LDAP со стороны клиента (см. AD MaxPageSize), но да, вы все равно можете обойти это с помощью элементов управления подкачкой .

Идея состоит в том, чтобы запросить постраничный набор результатов с количеством записей на странице меньше, чем ограничение 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 , должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...