para example python ssl active-directory python-ldap

example - python ldap para windows



Python+LDAP+SSL (1)

Después de estudiar así, encontré una solución por su cuenta

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) l = ldap.initialize("ldaps://ldap:636") l.set_option(ldap.OPT_REFERRALS, 0) l.set_option(ldap.OPT_PROTOCOL_VERSION, 3) l.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND) l.set_option( ldap.OPT_X_TLS_DEMAND, True ) l.set_option( ldap.OPT_DEBUG_LEVEL, 255 ) l.simple_bind_s("[email protected]","password")

Buen día.

Antes de disculparme por mi inglés, mis foros y recursos nacionales no me ayudaron.

Hubo una necesidad en el script que cambie (o cree) una contraseña de usuario en AD.

Después de estudiar el problema, se hizo evidente que

  1. La contraseña para asignar o cambiar solo puede establecer una conexión cifrada al servidor
  2. Enviar la contraseña solo es necesario en la codificación utf-16-le

En general, no hay problema con el segundo, pero primero tiene un problema con

$ python ldap-test-starttls.py Traceback (most recent call last): File "ldap-test-starttls.py", line 9, in <module> l.simple_bind_s( "cn=admin,ou=users,dc=test,dc=ru", "password" ) File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 206, in simple_bind_s msgid = self.simple_bind(who,cred,serverctrls,clientctrls) File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 200, in simple_bind return self._ldap_call(self._l.simple_bind,who,cred,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 96, in _ldap_call result = func(*args,**kwargs) ldap.SERVER_DOWN: {''info'': ''A TLS packet with unexpected length was received.'', ''desc'': "Can''t contact LDAP server"}

Código de script

import ldap host = ''ldaps://ldap:636'' l = ldap.initialize(host) l.set_option( ldap.OPT_X_TLS_DEMAND, True ) l.set_option( ldap.OPT_DEBUG_LEVEL, 255 ) username = ''someUser'' new_pass = ''ne$wP4assw0rd3!'' new_password = (''"%s"'' % new_pass).encode("utf-16-le") l.simple_bind_s( "cn=admin,ou=users,dc=test,dc=ru", "password" ) mod_attrs = [(ldap.MOD_REPLACE, ''unicodePwd'', new_password)],[( ldap.MOD_REPLACE, ''unicodePwd'', new_password)] l.modify_s(''CN=%s,dc=users,dc=test,dc=ru'' % username, mod_attrs) l.unbind_s() print "Successfully changed password."

Lo más probable es que alguien ya haya resuelto un problema similar. Sí, el script se ejecuta en Centos y no se puede usar py32win.

Gracias por adelantado.