2010-07-31 4 views
6

Je reçois une erreur de ldap.SIZELIMIT_EXCEEDED quand je lance ce code:LDAP: ldap.SIZELIMIT_EXCEEDED

import ldap 

url = 'ldap://<domain>:389' 
binddn = 'cn=<username> readonly,cn=users,dc=tnc,dc=org' 
password = '<password>' 

conn = ldap.initialize(url) 
conn.simple_bind_s(binddn,password) 

base_dn = "ou=People,dc=tnc,dc=org" 
filter = '(objectClass=*)' 
attrs = ['sn'] 

conn.search_s(base_dn, ldap.SCOPE_SUBTREE, filter, attrs) 

Où est mon nom d'utilisateur réel, mon mot de passe réel et le domaine réel.

Je ne comprends pas pourquoi c'est. Quelqu'un peut-il faire la lumière?

Merci! :) Eric

Répondre

3

Manuel: http://www.python-ldap.org/doc/html/ldap.html

exceptionldap .SIZELIMIT_EXCEEDED
An LDAP size limit was exceeded. This could be due to a sizelimit configuration on the LDAP server.

Je pense que votre meilleur pari est ici pour limiter la sizelimit sur le message que vous recevez du serveur. Vous pouvez le faire en définissant l'attribut LDAPObject.sizelimit (dépréciée) ou en utilisant le paramètre sizelimit lors de l'utilisation search_ext()

Vous devez également vous assurer que votre bind était en fait avec succès ...

+0

Merci pour votre inscription. Je suppose que cela aurait dû être ma première source. –

0

par défaut Active Directory pour retourner un maximum de 1000 résultats. Ce qui est plutôt ennuyeux, c'est que plutôt que de renvoyer 1000, avec un code d'erreur associé, il semble envoyer le code d'erreur sans les données.

eDirectory ne démarre pas par défaut et est complètement conifgurable pour ce que vous voulez.

D'autres répertoires le gèrent différemment. (Modifier et ajouter, si vous le savez).

+0

Je pensais que cela se passait.Donc, ce que je fais maintenant est de renvoyer la requête par la première lettre du nom de famille. C'est une meilleure idée que de montrer des milliers d'employés en même temps. –

+0

Oh, et merci! :) –

+0

Sachez que la recherche par la première lettre d'un nom ne fonctionne pas. Puisque votre ensemble de données finira par devenir assez grand pour retourner plus de 1000 S et ainsi de suite ... – geoffc

2

Le filtre que vous avez fourni (objectClass=*) est un filtre de présence . Dans ce cas, il limite les résultats à la requête de recherche aux objets dans le répertoire sous et sous l'objet de base que vous avez fourni - c'est-à-dire chaque objet sous l'objet de base puisque chaque objet a au moins un objectClass. Restreignez votre recherche en utilisant un filtre plus restrictif, ou une portée plus étroite, ou un objet de base inférieur, ou les trois. Pour plus d'informations sur le sujet de la demande de recherche, voir Using ldapsearch et LDAP: Programming Practices.

Les administrateurs de Directory Server sont libres d'imposer une limite à l'ensemble du serveur pour les entrées pouvant être renvoyées aux clients LDAP, ces limites étant définies comme imposée par le serveur. Il y a une limite de temps qui suit les mêmes règles.

Les clients LDAP doivent toujours fournir une limite de taille et une limite de temps avec une requête de recherche. Ces limites, appelées , les limites demandées par le client ne peuvent toutefois pas remplacer les limites imposées par le serveur.