active directory - Python LDAP: LDAPObject.search_s() works, but LDAPObject.search() doesn't -


i trying implement basic ldap authentication script in python, , trying perform simple ldap search , see if works. believe have correctly created , set ldap object , connection.

after binding, try perform search. using ldapobject.search_s() method returns list of strings user information. when use ldapobject.search() method, though, method returns result code 2, protocol error. reason want use search() method because returns int , not list. understand according the python ldap documentation, 2 methods can take in same arguments, don't understand why 1 method returning error , not other.

here code:

import ldap import getpass  # login info  username = raw_input("enter username: ") password = getpass.getpass("enter password: ")  ldap_server = "ldap://ipaddress:port" base_dn = "ou=domain users,dc=dummyname,dc=com" user_dn = username + "@dummyname.com" search_filter = "(&(objectclass=user)(samaccountname=" + username + "))"  ld = ldap.initialize(ldap_server); ld = ldap.open(ldap_server) ld.protocol_version = 3 ld.set_option(ldap.opt_referrals, 0)  # bind user information ldap connection  try:     print ld.simple_bind_s(user_dn, password)     results = ld.search(base_dn, ldap.scope_subtree, search_filter)     print results     ld.unbind_s() except ldap.invalid_credentials:     print "your username or password invalid." except exception e:     print("connection unsuccessful: " + str(e.message))     ld.unbind_s() 

full output of code is:

enter username: myusername enter password: (97, [], 1, []) 2 

any appreciated. thanks.

the following command using async search not block wait return value. int returns msgid of ldapobject need return value when returned.

msgid = ld.search(base_dn, ldap.scope_subtree, search_filter)  # returns int of msgid without blocking 

to actual results need call

actual_results = ld.result(msgid)   # blocks until search done , returns [(dn,attrs)] 

using following commands causes ldapobject search in "sequential order" blocking program.

results = ld.search_s(base_dn, ldap.scope_subtree, search_filter)  # blocks until results received   [(dn,attrs)] 

Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -