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
- La contraseña para asignar o cambiar solo puede establecer una conexión cifrada al servidor
- 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.