2010-01-15 20 views
10

Estoy utilizando el módulo python LDAP para (entre otras cosas) buscar grupos, y estoy corriendo en el límite de tamaño del servidor y obteniendo una excepción SIZELIMIT_EXCEEDED. He intentado tanto búsquedas síncronas como asíncronas y he llegado al problema en ambos sentidos.¿Cómo obtener más resultados de búsqueda que el sizelimit del servidor con Python LDAP?

Se supone que debe ser capaz de evitar esto configurando un control de búsqueda en la búsqueda, pero de acuerdo con los controles de documentación de python-ldap aún no están implementados para search_ext. ¿Hay alguna manera de hacer esto en Python? Si la biblioteca python-ldap no lo admite, ¿hay otra biblioteca de Python que lo haga?

+0

Estoy teniendo exactamente el mismo problema. Necesito procesar más resultados que el límite de tamaño, usando Python. –

+0

En caso de apuro, el enlace al servidor LDAP con las credenciales de root dn, a diferencia del enlace anónimo predeterminado, sorteará la restricción SIZELIMIT_EXCEEDED. Sin embargo, los resultados paginados (o paginación), como se detalla a continuación, son el camino a seguir, tanto desde la perspectiva del cliente como del servidor. – colminator

Respuesta

14

Aquí hay algunos enlaces relacionados con la búsqueda en python-ldap.

+6

Esos ejemplos están desactualizados. Estoy usando Python 2.6 y 2.7 con python-ldap> = 2.3.11 y la sintaxis ha cambiado un poco. Consulte https://bitbucket.org/jaraco/python-ldap/src/f208b6338a28/Demo/paged_search_ext_s.py para obtener un ejemplo actualizado. – zerodeux

6

Tras un breve debate sobre la lista de distribución Python-ldap-dev, puedo responder a mi propia pregunta.

Los controles de página SON compatibles con el módulo lDAP de Python, pero los documentos no se han actualizado para search_ext para mostrar eso. El example linked by Gorgapor muestra cómo usar ldap.controls.SimplePagedResultsControl para leer los resultados en páginas.

Sin embargo, hay un gotcha. Esto funcionará con los servidores de Microsoft Active Directory, pero no con los servidores de OpenLDAP (y posiblemente con otros, como los de Sun). El LDAP controls RFC es ambiguo en cuanto a si se debe permitir que los controles pagiados anulen la configuración sizelimit del servidor. En los servidores de ActiveDirectory pueden de forma predeterminada, mientras que en OpenLDAP no pueden, pero creo que hay una configuración de servidor que les permitirá.

Así que incluso si implementa el control paginado, todavía no hay garantía de que obtendrá todos los objetos que desee. Suspiro

También los controles paginados solo están disponibles con LDAP v3, pero dudo que haya muchos servidores v2 en uso.

+0

El navegador ldap basado en python, Luma, parece estar trabajando en torno a esta limitación de alguna manera. He estado tratando de ver su código fuente para resolverlo, pero no he tenido suerte. Además, ¿podría vincularse al subproceso python-ldap-dev que mencionó? –

+1

Los límites de recursos solicitados por el cliente, como el límite de tiempo y el límite de tamaño, nunca pueden anular los límites de recursos de los servidores. Para determinar qué controles de solicitud son compatibles, consulte la raíz DSE (http://bit.ly/the-root-dse). –

Cuestiones relacionadas