2010-01-15 10 views
10

Sto utilizzando il modulo python LDAP per cercare (tra le altre cose) i gruppi e sto correndo nel limite di dimensioni del server e ottenendo un'eccezione SIZELIMIT_EXCEEDED. Ho provato entrambe le ricerche sincrone e asincrone e ho riscontrato il problema in entrambe le direzioni.Come ottenere più risultati di ricerca rispetto al limite del server con Python LDAP?

Si suppone che si sia in grado di aggirare questo impostando un controllo di paging sulla ricerca, ma in base ai controlli python-ldap i controlli non sono ancora implementati per search_ext. C'è un modo per farlo in Python? Se la libreria python-ldap non lo supporta, esiste un'altra libreria Python?

+0

Sto avendo lo stesso identico problema. Ho bisogno di elaborare più risultati rispetto al limite di dimensione, usando python. –

+0

In un pizzico, l'associazione al server LDAP con le credenziali di dn radice - in contrasto con il bind anonimo predefinito - eluderà la restrizione SIZELIMIT_EXCEEDED. Tuttavia, i risultati di paging (o impaginazione) - come descritto di seguito - sono la strada da percorrere sia dal punto di vista del cliente che del server. – colminator

risposta

14
+6

Questi esempi sono obsoleti. Sto usando Python 2.6 e 2.7 con python-ldap> = 2.3.11 e la sintassi è cambiata un po '. Vedi https://bitbucket.org/jaraco/python-ldap/src/f208b6338a28/Demo/paged_search_ext_s.py per un esempio aggiornato. – zerodeux

6

Dopo una discussione sulla mailing list python-ldap-dev, posso rispondere alla mia domanda.

I controlli di pagina SONO supportati dal modulo lDAP Python, ma i documenti non erano stati aggiornati per search_ext per mostrarlo. example linked by Gorgapor mostra come utilizzare ldap.controls.SimplePagedResultsControl per leggere i risultati nelle pagine.

Tuttavia c'è un gotcha. Ciò funzionerà con i server Microsoft Active Directory, ma non con i server OpenLDAP (e possibilmente altri, come quelli di Sun). Lo LDAP controls RFC è ambiguo riguardo al fatto che ai controlli impaginati debba essere consentito di sovrascrivere l'impostazione di sizelimit del server. Sui server ActiveDirectory possono, di default, mentre su OpenLDAP non possono, ma penso che ci sia un'impostazione server che consentirà loro di farlo.

Quindi, anche se si implementa il controllo di paging, non è ancora garantito che otterrà tutti gli oggetti desiderati. Sigh

Anche i controlli di paging sono disponibili solo con LDAP v3, ma dubito che ci siano molti server v2 in uso.

+0

Il browser LDAP basato su Python, Luma, sembra aver lavorato su questa limitazione in qualche modo. Ho cercato di guardare attraverso il suo codice sorgente per capirlo, ma non ho avuto fortuna. Inoltre, potresti collegarti al thread python-ldap-dev che hai menzionato? –

+1

I limiti di risorse richiesti dal client come limite di tempo e limite di dimensione non possono mai ignorare i limiti di risorse dei server. Per determinare quali controlli delle richieste sono supportati, eseguire una query sul DSE radice (http://bit.ly/the-root-dse). –

Problemi correlati