2016-07-27 11 views
0

Grundsätzlich versuchen, das Kennwort des Benutzers mithilfe von LDAP Python zurückzusetzen. Ich habe hier durch verschiedene Beiträge verschwunden war, aber kein Glück :(Aktualisieren Sie Active Directory-Kennwort mithilfe von LDAP Python

versucht, mit:.

  • a) modify_s() - returns "Kein solches Objekt" jedes Mal. Versucht mit verschiedenen Benutzer-DN.

    {'info': "0000208D: NameErr: DSID-0310020A, Problem 2001 (NO_OBJECT), Daten 0, beste Übereinstimmung von: \ n \ t'DC = mydomain, DC = com '\ n",' abgestimmt ‚: 'DC = mydomain, DC = com', 'ab': 'Kein solches Objekt'}

    Hier ist der Code Snippet:

    def changePassword(userEmail, oldPassword, newPassword): 
    try: 
        ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) 
    
        ldap_client = ldap.initialize("ldap://127.0.01.1:389") 
        ldap_client.set_option(ldap.OPT_REFERRALS, 0) 
        ldap_client.set_option(ldap.OPT_PROTOCOL_VERSION, 3) 
        ldap_client.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND) 
        ldap_client.set_option(ldap.OPT_X_TLS_DEMAND, True) 
        ldap_client.set_option(ldap.OPT_DEBUG_LEVEL, 255) 
        ldap_client.simple_bind_s(ADMIN_EMAIL, ADMIN_PASSWORD) 
    
        # Set AD password 
        #unicode_pass = unicode('\"' + newPassword + '\"', "iso-8859-1") 
        unicode_pass = newPassword 
        password_value = unicode_pass.encode("utf-16-le") 
        add_pass = [(ldap.MOD_REPLACE, 'unicodePwd', [password_value]),(ldap.MOD_REPLACE, 'unicodePwd', [password_value])] 
    
        # Replace password 
        try: 
         user_dn = 'CN=%s,DC=mydomain,DC=com' % username 
         ldap_client.modify_s(user_dn, add_pass) 
         print "Active Directory password for", username, \ 
          "was set successfully!" 
        except ldap.LDAPError, e: 
         sys.stderr.write('Error setting AD password for: ' + username + '\n') 
         sys.stderr.write('Message: ' + str(e) + '\n') 
         ldap_client.unbind_s() 
         return 'SOME_PROBLEM' 
        ldap_client.unbind_s() 
        return 'AUTHENTICATED' 
    except ldap.INVALID_CREDENTIALS: 
        ldap_client.unbind() 
        return 'INVALID_CREDENTIALS' 
    except ldap.SERVER_DOWN: 
        return 'SERVER_UNAVAILABLE' 
    
  • b) passwd(userEmail, oldPassword, newPassword). Es wird gut ausgeführt, aber das Passwort wird nicht aktualisiert.

Brauchen Sie Hilfe bei der Identifizierung des Problems.

Referenz Links: Python+LDAP+SSL

python-ldap and Microsoft Active Directory: connect and delete user

how to set lockoutTime and password of a user of Active Directory

How can I change password for domain user(windows Active Directory) using Python?

https://groups.google.com/forum/#!topic/macromedia.coldfusion.security/Rq7xx15OeBs

http://www.grotan.com/ldap/python-ldap-samples.html#add

http://marcitland.blogspot.in/2011/02/python-active-directory-linux.html

https://snipt.net/Fotinakis/change-active-directory-password-via-ldap-modify-call/

Antwort

0

Ich denke, unter Programm hilfreich für Sie .. Windows Active Directory verwenden Passwort-Attribut als Unicode-Methode https://technet.microsoft.com/en-us/magazine/ff848710.aspx

import ldap 
import ldap.modlist as modlist 
import base64 
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) 
l = ldap.initialize('ldaps://exam.local') 
l.simple_bind_s('[email protected]', '[email protected]') 
dn="cn=map6,ou=Police,dc=exam,dc=local" 
new_password='[email protected]' 
unicode_pass = unicode('\"' + new_password + '\"', 'iso-8859-1') 
print (unicode_pass) 
password_value = unicode_pass.encode('utf-16-le') 
add_pass = [(ldap.MOD_REPLACE, 'unicodePwd', [password_value])] 
print (password_value) 
l.modify_s(dn, add_pass) 
l.modify_s(dn, add_pass) 
l.unbind_s()  
0

Von dem, was ich sehe, ist dass Sie user_dn nicht richtig eingestellt ist. Überprüfen Sie, ob der vollständige DN tatsächlich im Directory Server vorhanden ist. Überprüfen Sie, ob Ihre Username-Variable korrekt analysiert wurde (keine Newline- oder Tab-Zeichen) und der Base DN überprüft wurde.

sys.stderr.write('Error setting AD password for: ' + username + '\n') 
sys.stderr.write('DN: ' + user_dn + '\n') 
sys.stderr.write('Message: ' + str(e) + '\n') 

Die Fehlermeldung ist ziemlich klar, dass AD nicht das Objekt (DN) finden es wünscht ** (NO_OBJECT)

{'info': "0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), 
data 0, best match of:\n\t'DC=mydomain,DC=com'\n", 'matched': 
'DC=mydomain,DC=com', 'desc': 'No such object'} 
ändern