[Python-es] autenticación LDAP

lasizoillo lasizoillo en gmail.com
Jue Jul 29 01:54:31 CEST 2010


El día 28 de julio de 2010 23:12, Gustavo Hernández
<gustavo.hernandez en etecsa.cu> escribió:
>
> Saludos a todos:
>
> Es posible que el asunto, ya haya sido tratado en la lista, mi problema
> es que supuestamente el simple_bind(usuario,password), debe validar la
> existencia del usuario y el PASSWORD, pero no es así en mi caso. No
> obstante en el proceso del search, si el nombre de usuario fue correcto
> o sea existe, lo encuentra y es validado el servicio (en este caso
> navegacion), en resumen puedo poner un usuario válido con cualquier
> password, que lo encuentra sin problemas.
>
> Alguna sugerencia?

Primero hacer mejor las preguntas:
 * No especificas que librería usas para el acceso a ldap
 * No especificas cual es el Distinguised Name en tu ldap, ni como lo
tienes montado
 * En el código fuente no se ve si el usuario que usas para validar es
un distinguised name
 * El código fuente que adjuntas tiene mucha morralla (cosas de ui que
vete a saber que es, ...)

Te adjunto un ejemplo mejor, aunque parece que no es de la librería
que usas (crea la conexión de manera diferente):
http://www.grotan.com/ldap/python-ldap-samples.html

Supongo que tu problema es el siguiente:
Tu dn es algo como: uid=manolito, o=isp
Al hacer un search por uid=manolito y servicio=navegación, te devuelve
el campo con el dn correcto (y con posibilidad de devolver incorrectos
de las ramas no apropiadas). Pero el bind no te funciona porque haces
un bind de "manolito" en vez de "uid=manolito, o=isp".

Puedes probar esta hipotesis usando las herramientas de consola que
seguramente te vengan con tu servidor ldap.

Un saludo:

Javi

>
> Gracias por adelantado
>
> Nota:  adjunto parte del código. Se conecta sin problemas
>
>
>                     try:
>                        l = ldap.initialize(self.servidor_url)
>                        l.protocol_version = ldap.VERSION2
>
>                      except ldap.LDAPError, e:
>                        self.ui.mLogin.setText ('Error en Servidor ')
>                        self.ui.eUsuario.setFocus()
>                        return
>
>                      baseDN = "ou=people, dc=myorg, dc=tm"
>                      searchScope = ldap.SCOPE_SUBTREE
>                      retrieveAttributes = None
>                      searchFilter =
> "(&(uid="+str(self.ui.eUsuario.text()+")(servicio=navegacion))")
> #                     searchFilter = "(&(uid="+str(self.usuario+"))")
>
>                      try:
>                        l.simple_bind(self.usuario,self.contrasena)
>
>                      except:
>                        self.ui.mLogin.setText ('NO EXISTE USUARIO')
>                        self.ui.eUsuario.setFocus()
>                        return
>
>                      try:
>
>
>                        ldap_result_id = l.search(baseDN,
> searchScope,searchFilter,retrieveAttributes)
>
>                        result_set = []
>                        result = 0
>                        while 1:
>                            result_type, result_data = l.result(ldap_result_id, 0)
>
>                            if (len(result_data) == 0):
>                                self.ui.mLogin.setText ('SIN ACCESO AL
> SERVICIO')
>                                self.ui.eUsuario.setFocus()
>                                break
>                            else:
>                                if result_type == ldap.RES_SEARCH_ENTRY:
>                                   result_set.append(result_data)
>                                   result = 1
>                                   break
>                      except ldap.LDAPError, e:
>                        self.ui.mLogin.setText ('Error de lectura en LDAP')
>                        self.ui.eUsuario.setFocus()
>                        return
>
>
> ---
> This message was processed by Kaspersky Mail Gateway 5.6.28/RELEASE running at host imx3.etecsa.cu
> Visit our web-site: <http://www.kaspersky.com>, <http://www.viruslist.com>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


Más información sobre la lista de distribución Python-es