2010-06-16 13 views
0

J'essaie d'utiliser python pour interroger le serveur LDAP, et il ne me renvoie toujours aucun résultat. et quelqu'un m'aider à trouver ce qui ne va pas avec mon code python? il fonctionne bien sans excpetions, et il n'a toujours aucun résultat. J'ai joué avec le filtre comme "cn = partofmyname" mais juste pas de chance. grâce à l'aideRequête LDAP utilisant Python: toujours aucun résultat

import ldap 



try: 
    l = ldap.open("server") 
    l.protocol_version = ldap.VERSION3 
    l.set_option(ldap.OPT_REFERRALS, 0) 
    output =l.simple_bind("cn=username,cn=Users,dc=domian, dc=net",'password$R') 
    print output 
except ldap.LDAPError, e: 
    print e 

baseDN = "DC=domain,DC=net" 
searchScope = ldap.SCOPE_SUBTREE 
## retrieve all attributes - again adjust to your needs - see documentation for more options 
retrieveAttributes = None 

Filter = "(&(objectClass=user)(sAMAccountName=myaccount))" 

try: 
    ldap_result_id = l.search(baseDN, searchScope, Filter, retrieveAttributes) 
    print ldap_result_id 
    result_set = [] 
    while 1: 
     result_type, result_data = l.result(ldap_result_id, 0) 
     if len(result_data) == 0: 
      print 'no reslut' 
      break 
     else: 
      for i in range(len(result_set)): 
       for entry in result_set[i]: 
        try: 
         name = entry[1]['cn'][0] 
         email = entry[1]['mail'][0] 
         phone = entry[1]['telephonenumber'][0] 
         desc = entry[1]['description'][0] 
         count = count + 1 
         print "%d.\nName: %s\nDescription: %s\nE-mail: %s\nPhone: %s\n" %\ 
           (count, name, desc, email, phone) 
        except: 
         pass 
         ## here you don't have to append to a list 
         ## you could do whatever you want with the individual entry 
      #if result_type == ldap.RES_SEARCH_ENTRY: 
      # result_set.append(result_data) 
      # print result_set 
except ldap.LDAPError, e: 
    print e 
l.unbind() 
+0

Je ne sais pas - pour une raison quelconque, je préfère le titre « ReSlut » avant les modifications http://stackoverflow.com/posts/3057039/revisions Il m'a fait regarder . –

+0

Le module python 'ldap' a également une option pour activer/augmenter la verbosité des messages de déboguage routés vers la sortie std si je me souviens bien. – ChristopheD

Répondre

2

J'ai trouvé mon problème.

simple_bind("cn=username,cn=Users,dc=domian, dc=net",'password$R') 

devrait être

simple_bind("domain/username",'password$R') 
+1

dunno si c'est important, mais dans la première ligne * domaine * est mispelt, devrait être 'dc = domain' (l'idée étant peut-être que les deux syntaxes fonctionnent). –

+0

Cela fonctionne uniquement dans Active Directory. La version précédente devrait fonctionner dans tous les annuaires LDAP. Si vous avez besoin de compatibilité, n'utilisez pas cette option. – Davisein

0

je recommande vivement que vous examiniez le trafic réseau à l'aide pour voir ce qui se passe au niveau du protocole Wireshark (www.wireshark.org). En outre, obtenir un outil tel que le navigateur Softerra LDAP 2.6 (la version gratuite à http://www.ldapbrowser.com/download.htm) pour vérifier le serveur A/D et l'organisation du répertoire.

Si vous avez toujours des problèmes, postez un résumé de ce que vous trouvez à l'aide de ces outils.

Questions connexes