python-3.x - ldap django
No se puede cambiar la contraseña del usuario a través de ldap3 Python3 (2)
Este código funciona con Windows 2012 R2 AD:
pip instala ldap
#!/usr/bin/python
import ldap3
SERVER=''127.0.0.1''
BASEDN="DC=domain,DC=com"
USER="[email protected]"
CURREENTPWD="current_password"
NEWPWD="new_password"
SEARCHFILTER=''(&(|(userPrincipalName=''+USER+'')(samaccountname=''+USER+'')(mail=''+USER+''))(objectClass=person))''
USER_DN=""
ldap_server = ldap3.Server(SERVER, get_info=ldap3.ALL)
conn = ldap3.Connection(ldap_server, USER, CURREENTPWD, auto_bind=True)
conn.start_tls()
print conn
conn.search(search_base = BASEDN,
search_filter = SEARCHFILTER,
search_scope = ldap3.SUBTREE,
attributes = [''cn'', ''givenName''],
paged_size = 5)
for entry in conn.response:
if entry.get("dn") and entry.get("attributes"):
if entry.get("attributes").get("cn"):
USER_DN=entry.get("dn")
print USER_DN
print ldap3.extend.microsoft.modifyPassword.ad_modify_password(conn, USER_DN, NEWPWD, CURREENTPWD, controls=None)
Cada vez que trato de cambiar la contraseña de alguien a través de la biblioteca ldap3, aparece el siguiente error:
{''type'': ''modifyResponse'', ''result'': 53, ''message'': ''0000001F: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0/n/x00'', ''referrals'': None, ''description'': ''unwillingToPerform'', ''dn'': ''''}
Este error generalmente ocurre debido a las dos condiciones: cualquiera de los usuarios está tratando de modificar la contraseña a través de la conexión no encriptada o la contraseña se envía con la codificación incorrecta. Mi conexión SSL está bien (al menos parece):
print(connection)
>>> ldaps://DC1.DOMAIN.LOCAL:636 - ssl - user: DOMAIN/admin - not lazy - bound - open - <local: 172.16.10.2:49230 - remote: 172.16.10.254:636> - tls not started - listening - SyncStrategy - internal decoder
Traté de codificar la cadena que intento enviar al servidor LDAP, pero .encode (''utf-16le'') no funcionó. ¿Alguna otra solución?
Tengo un entorno de dominio de prueba con Windows Server 2012 R2 como controlador de dominio, y el código con el que intento cambiar la contraseña está presente a continuación.
import ssl
from ldap3 import *
tls_configuration = Tls(validate=ssl.CERT_REQUIRED, version=ssl.PROTOCOL_TLSv1_2)
s = Server(''DC1.domain.local'', get_info=ALL, use_ssl=True, tls=tls_configuration)
password = ''mypasswordhere''
c = Connection(s, user="DOMAIN//admin", password=password)
c.open()
c.bind()
user = "CN=Dummy Dumass,OU=Automatically Generated,OU=Staff,OU=RU,DC=DOMAIN,DC=LOCAL"
c.modify(user, {
''unicodePwd'': [(MODIFY_REPLACE, [''New12345''])]
})
print(c.result)
c.unbind()
ldap3 contiene un método específico para cambiar la contraseña de AD, use el siguiente código en lugar de c.modify()
:
c.extend.microsoft.modify_password(user, new_password)