Je reçois une erreur où Je ne comprends pas pourquoi c'est. Quelqu'un peut-il verser une lumière? P> P> ldap.sizelimit_exeded code> erreur lorsque j'exécute ce code:
nom d'utilisateur code> est mon nom d'utilisateur réel, < Code> Mot de passe Code> Est mon mot de passe réel et
Domaine code> est le domaine actuel. P>
6 Réponses :
manuel: http://www.python-lap.org/doc/ HTML / LDAP.HTML P>
exception em>
ldap code>.
Sizelimit_exededed code> strong>
Une limite de taille du LDAP a été dépassée. Ce pourrait être dû à unsizelimit code> Configuration sur le serveur LDAP. P> blockQuote>
Je pense que votre meilleur pari ici est de limiter le
Sizelimit code> sur le message que vous recevez du serveur. Vous pouvez le faire en définissant l'attribut
ldapobject.sizelimit code> (obsolète) ou à l'aide du paramètre Sizelimit lors de l'utilisation de
Search_ext () Code> P>
Vous devez également vous assurer que votre BIND ait réussi ... P>
Merci pour cela. Je suppose que cela aurait dû être ma première source.
Il convient de noter que lorsque vous pouvez utiliser Search_ext (Taille = souhaité_num) CODE> Pour éviter le
LDAP.SIZELIMIT_EXECKEDED code> Exception, cela ne vous permettra pas de voir tous les utilisateurs. Le sizelimit n'écrase pas les paramètres du serveur, de sorte que si le serveur ait le Sizelimit défini sur 100 utilisateurs, vous ne pouvez pas simplement définir la taille à 500 et vous attendre à les récupérer.
Active Directory par défaut pour renvoyer un max de 1000 résultats. Ce qui est en quelque sorte ennuyeux, c'est plutôt que de retourner 1000, avec un code d'erreur associé, il semble envoyer le code d'erreur sans les données. P>
eDirectory commence sans défaut et est complètement conifgurable de tout ce que vous voulez. p>
Les autres répertoires le gérer différemment. (Modifier et ajouter, si vous savez). P>
Je pensais que cela se produisait. Donc, ce que je fais maintenant, c'est de retour Regarder la première lettre du nom de famille. C'est une meilleure idée que de montrer des milliers d'employés à la fois.
Sachez que la recherche de la première lettre d'un nom ne fonctionne pas. Puisque finalement, votre ensemble de données sera suffisamment grand pour retourner plus de 1000 s et ainsi de suite ...
voir ici pour quoi faire lorsque vous obtenez cette erreur: p>
Comment obtenir plus de résultats de recherche que le sizelimit du serveur avec Python LDAP? P>
Le filtre que vous avez fourni ( Les administrateurs de serveur de répertoires sont libres d'imposer une limite de serveur à l'échelle des entrées pouvant être renvoyées sur des clients LDAP, ceux-ci sont appelés limite de taille em> imposée au serveur. Il y a une limite de temps qui suit les mêmes règles. P>
Les clients LDAP doivent toujours alimenter une limite de taille et une limite de temps avec une demande de recherche, ces limites, appelées les limites demandées par le client em> ne peuvent toutefois pas remplacer les limites imposées au serveur. P> ObjectClass = * code>) est un filtre de présence em>. Dans ce cas, il limite les résultats à la demande de recherche à des objets dans le répertoire et sous l'objet de base que vous avez fourni - quel est chaque objet sous l'objet de base car chaque objet comporte au moins un
ObjectClass code>. Limitez votre recherche à l'aide d'un filtre plus restrictif ou d'une portée plus stricte, ou d'un objet de base inférieur, ou des trois. Pour plus d'informations sur le sujet de la demande de recherche, voir Utilisation de LDAPSECH < / a> em> et LDAP: Programmation Pratiques em> . P>
Vous devez utiliser la recherche en pagie pour y parvenir. La taille de la page dépendrait de votre serveur LDAP, 1000 fonctionnerait pour Active Directory. P>
Jetez un coup d'œil à http: //google-apps-for-your-domain-ldap-sync.googlecode.com/svn/trunk/ldap_ctxt.py Pour un exemple P>
Vous rencontrez cette exception très probablement parce que le serveur que vous communiquez avec plus de résultats que ne peut être retourné par une seule demande. Afin de contourner ce problème, vous devez utiliser des résultats en pages pouvant être effectués en utilisant SIMPLEPAGEDRESULTSULTROL .
Voici une implémentation Python3 que j'ai proposée après une édition fortement ce que j'ai trouvé ici et dans Documentation officielle . Au moment de la rédaction de cela, il fonctionne avec le package PIP3 Python-LDAP version 3.2.0 . P>
def get_list_of_ldap_users(): hostname = "<domain>:389" username = "username_here" password = "password_here" base = "ou=People,dc=tnc,dc=org" print(f"Connecting to the LDAP server at '{hostname}'...") connect = ldap.initialize(f"ldap://{hostname}") connect.set_option(ldap.OPT_REFERRALS, 0) connect.simple_bind_s(username, password) search_flt = "(objectClass=*)" page_size = 500 # how many users to search for in each page, this depends on the server maximum setting (default highest value is 1000) searchreq_attrlist=["sn"] # change these to the attributes you care about req_ctrl = SimplePagedResultsControl(criticality=True, size=page_size, cookie='') msgid = connect.search_ext(base=base, scope=ldap.SCOPE_SUBTREE, filterstr=search_flt, attrlist=searchreq_attrlist, serverctrls=[req_ctrl]) total_results = [] pages = 0 while True: # loop over all of the pages using the same cookie, otherwise the search will fail pages += 1 rtype, rdata, rmsgid, serverctrls = connect.result3(msgid) for user in rdata: total_results.append(user) pctrls = [c for c in serverctrls if c.controlType == SimplePagedResultsControl.controlType] if pctrls: if pctrls[0].cookie: # Copy cookie from response control to request control req_ctrl.cookie = pctrls[0].cookie msgid = connect.search_ext(base=base, scope=ldap.SCOPE_SUBTREE, filterstr=search_flt, attrlist=searchreq_attrlist, serverctrls=[req_ctrl]) else: break else: break return total_results