Тайм-аут привязки OpenLDAP

Я пытаюсь понять, как правильно реализовать тайм-аут для запроса привязки OpenLDAP к серверу LDAP. Из того, что я нашел, похоже, есть два способа сделать это: с LDAP_OPT_TIMELIMIT и LDAP_OPT_TIMEOUT. Моя основная путаница связана с попыткой выяснить, в чем разница между ними.

Насколько я понимаю, TIMELIMIT — это стандарт LDAP, который устанавливает ограничение по времени для цикла запроса/ответа для любого поиска ldap. По крайней мере, в Windows значение по умолчанию составляет 120 секунд.

С другой стороны, TIMEOUT специфичен для OpenLDAP и используется исключительно на стороне клиента для тайм-аута запросов на привязку LDAP. Это на самом деле звучит ближе всего к тому, что я хочу реализовать. Из обсуждений я знаю, что использование ldap_set_opt для TIMEOUT не было полностью реализовано до версии 2.4. От Как заставить ldap_simple_bind_s истечь время ожидания? Я знаю, что обходной путь для более ранних версий заключается в использовании асинхронной привязки, за которой следует ldap_result с тайм-аутом и ldap_abandon_ext в случае тайм-аута для отбрасывания запроса. Это имеет смысл, хотя при просмотре исходного кода для синхронного связывания в версии 2.4 кажется, что он никогда не обрабатывает тайм-аут таким образом. Это заставляет меня задаться вопросом, насколько важен вызов ldap_abandon_ext.

Любые ответы или понимание будут оценены.


person Jon Larson    schedule 20.07.2012    source источник
comment
Привязка не является поиском, поэтому TIMELIMIT не имеет значения.   -  person user207421    schedule 20.07.2012
comment
Вот где это кажется немного запутанным. документы Microsoft похоже, предполагается, что TIMELIMIT применяется как к привязкам, так и к поискам, что, по-видимому, OpenLDAP их разделяет. с TIMEOUT и TIMELIMIT. Это просто разница в реализации?   -  person Jon Larson    schedule 23.07.2012
comment
Различные API. Эти вещи не являются частью спецификаций LDAP.   -  person user207421    schedule 30.07.2012


Ответы (1)


Если кто-то еще ищет время ожидания привязки OpenLDAP, вам следует использовать метод из ответа Аки здесь. Он также работает в библиотеке ldapcpp при использовании LDAPAsynConnection для привязки. Перед привязкой вы должны просто включить его с помощью метода getSessionHandle().

person user295297    schedule 11.08.2014