Problemas python-ldap

Marcos Sánchez Provencio rapto en arrakis.es
Mar Nov 4 15:50:17 CET 2003


¿Has intentado la misma consulta desde gq? ¿con el mismo usuario (por 
los permisos)? ¿trazado las peticiones con ethereal?

jesus f wrote:
> Gracias una vez más por las sugerencias.
> 
> He probado a utilizar search_s y también a poner un
> BaseDN más alto en la jerarquía y sigue sin funcionar.
> 
> He conseguido caracterizar todavía más el problema.
> Tengo 2 objetos con uid=qj, cada uno con un
> objectclass diferente. Uno de ellos funciona y otro
> no. 
> 
> Primer script:
> ******************************************************
> import ldap
> username = "Directory Manager"
> password = "PASSWORD"
> baseDN = "o=Filial en Espana,o=EMPRESA"
> #searchScope = ldap.SCOPE_BASE
> searchScope = ldap.SCOPE_SUBTREE
> #searchScope = ldap.SCOPE_ONELEVEL
> retrieveAttributes = None
> searchFilter =
> "(&(uid=qj)(objectclass=EMPRESAAplicacionesExtranet))"
> l = ldap.open("MAQUINA:PUERTO");
> l.protocol_version = ldap.VERSION3
> l.simple_bind(username, password)
> res = l.search_s(baseDN, searchScope, searchFilter,
> retrieveAttributes)
> print res
> ******************************************************
> 
> Resultado:
> ******************************************************
> []
> ******************************************************
> 
> Segundo script:
> ******************************************************
> import ldap
> username = "Directory Manager"
> password = "PASSWORD"
> baseDN = "o=Filial en Espana,o=EMPRESA"
> #searchScope = ldap.SCOPE_BASE
> searchScope = ldap.SCOPE_SUBTREE
> #searchScope = ldap.SCOPE_ONELEVEL
> retrieveAttributes = None
> searchFilter =
> "(&(uid=qj)(objectclass=EMPRESAUsuarioExtranet))"
> l = ldap.open("MAQUINA;PUERTO");
> l.protocol_version = ldap.VERSION3
> l.simple_bind(username, password)
> res = l.search_s(baseDN, searchScope, searchFilter,
> retrieveAttributes)
> print res
> ******************************************************
> 
> Resultado:
> ******************************************************
> [('uid=qj,ou=EMPRESAUsuariosExtranet,ou=EMPRESAExtranet,o=Filial
> en Espana,o=EMPRESA', {'givenname': ['qj'], 'sn':
> ['usuario'], 'uid': ['qj'], 'EMPRESAempresa': ['qj'],
> 'EMPRESAperfilaut': ['qj#EADMIN', 'qj#EADMIN/qj',
> 'qj#TADMEMP/XXX'], 'EMPRESAdocumento':
> ['ESD12.234.234T'], 'userpassword':
> ['{SHA}6CSMvnmiiP/sddcwCtLgcXL0h/Y='], 'objectclass':
> ['top', 'person', 'organizationalPerson',
> 'inetOrgPerson', 'EMPRESAUsuarioExtranet'], 'cn': ['qj
> usuario'], 'c': ['ES'], 'EMPRESAtipodocumento':
> ['D']})]
> ******************************************************
> 
> Otro apunte: si pongo un filtro sencillo (uid=qj) me
> sale el resultado de "ou=EMPRESAUsuariosExtranet".
> Como decía en mi primer "post" parece que solamente
> reconoce los objetos de tipo "usuario".
> 
> 
> Saludos.
> 
> 
>  --- Ricardo_Borillo_Doménech <borillo en aditel.org>
> escribió: > 
> 
>>No te preocupes por el esquema, sólo era para tener
>>más detalles ... De
>>cualquier forma siempre es aconsejable utilizar
>>alguno de los muchos
>>esquemas de LDAP ya definidos (aunque no conozco las
>>necesidades concretas
>>que teneis :)
>>
>>Lo que no acaba de cuadrarme es que no funcionen
>>filtros más
>>generales. Puedes probar a utilizar un baseDN de más
>>alto nivel?
>>
>>Salut,
>>  Ricardo
>>
>>
>>El día 04/11/03, jesus f escribió:
>>
>>
>>>Hola de nuevo,
>>>
>>>te contesto a lo que me planteas (gracias por el
>>>esfuerzo):
>>>
>>>*) El atributo SI que existe. Además he probado
>>
>>con
>>
>>>bastantes de los que disponen las entidades.
>>
>>También
>>
>>>he probado con <None>.
>>>
>>>*) El esquema del LDAP no lo he puesto por que no
>>>puedo. Actualmente este trabajo es para un cliente
>>
>>y
>>
>>>no puedo divulgar ningún detalle. De hecho, en el
>>>correo inicial he cambiado los nombre de entidades
>>
>>y
>>
>>>atributos.
>>>
>>>*) OK. El filtro en el correo estaba mal, pero en
>>
>>mis
>>
>>>pruebas era correcto.
>>>
>>>*) He probado con filtros más generales y tampoco
>>>funciona.
>>>
>>>*) He probado con VERSION2 y VERSION3.
>>>
>>>*) Voy a probar con search_s.
>>>
>>>
>>>Saludos.
>>>
>>>
>>>
>>> --- Ricardo_Borillo_Doménech <borillo en aditel.org>
>>>escribió: >
>>>
>>>>Hola !!
>>>>
>>>>No conozco que esquema de LDAP estás utilizando,
>>>>pero ahí van algunas
>>>>causas posibles de fallo:
>>>>
>>>>  *. El atributo empresa no existe para el tipo
>>
>>de
>>
>>>>objeto que intentas
>>>>     recuperar. No pongas ninguno y te los
>>
>>sacará
>>
>>>>todos.
>>>>
>>>>  *. Al filtro le falta un paréntesis al final.
>>>>Sería así:
>>>>
>>>>     (&(seccion=*)(objectclass=SeccionAsociada))
>>>>
>>>>  *. Prueba primero con un filtro más general
>>
>>para
>>
>>>>ver cómo están los
>>>>     datos dentro del LDAP:
>>>>
>>>>     (objectclass=*)
>>>>
>>>>Como comentario te diría que OJO con la versión
>>
>>del
>>
>>>>protocolo que usas
>>>>VERSION2, ya que actualmente la más común es la
>>
>>3.
>>
>>>>Has probado el "search_s" ? Este método realiza
>>
>>las
>>
>>>>llamadas de forma
>>>>síncrona y no tienes que ejecutar un "result"
>>>>despues para recuperar la
>>>>consulta ... un poco más comodo :)
>>>>
>>>>Si no te soluciono el problema, detalla un poco
>>
>>más
>>
>>>>el esquema de LDAP que
>>>>utilizas ...
>>>>
>>>>Salut,
>>>>  Ricardo
>>>>
>>>>
>>>>El día 04/11/03, jesus f escribió:
>>>>
>>>>
>>>>>Estoy haciendo un código en python para
>>
>>recuperar
>>
>>>>unos
>>>>
>>>>>datos que están almacenados en un LDAP.
>>>>>
>>>>>En este LDAP tengo varios tipos de objetos:
>>>>
>>>>usuarios,
>>>>
>>>>>grupos, empresas, aplicaciones y grupos de
>>>>>aplicaciones.
>>>>>
>>>>>El código que estoy usando lo he copiado de
>>>>
>>>>algunos
>>>>
>>>>>ejemplos que he visto por el web:
>>>>>
>>>>>import ldap
>>>>>username = "Directory Manager"
>>>>>password = "xxxxxx"
>>>>>baseDN = "ou=xxxxxExtranet,o=xxxxxxx,o=es"
>>>>>searchScope = ldap.SCOPE_SUBTREE
>>>>>retrieveAttributes = ["empresa"]
>>>>>searchFilter =
>>>>>"(&(seccion=*)(objectclass=SeccionAsociada)"
>>>>>l = ldap.open("MAQUINA:PUERTO");
>>>>>l.protocol_version = ldap.VERSION2
>>>>>l.simple_bind(username, password)
>>>>>ldap_result_id = l.search(baseDN, searchScope,
>>>>>searchFilter, retrieveAttributes)
>>>>>result_set = []
>>>>>result_type, result_data =
>>>>
>>>>l.result(ldap_result_id, 0)
>>>>
>>>>>result_set.append(result_data)
>>>>>print result_set
>>>>>
>>>>>
>>>>>Pues bien, este código está funcionando
>>>>
>>>>adecuadamente
>>>>
>>>>>para usuarios, pero no funciona de ninguna
>>
>>forma
>>
>>>>para
>>>>
>>>>>el resto de las entidades.
>>>>>
>>>>>¿ Teneis alguna experiencia parecida o alguna
>>
>>idea
>>
>>>>al
>>>>
>>>>>respecto ?
>>>>>
>>>>>He mirado en los ficheros de log del LDAP y la
>>>>
>>>>query
>>>>
>>>>>se ejecuta correctamente, salvo que responde
>>
>>con 0
>>
>>>>>entradas, y estoy seguro de que hay varias.
>>>>>
>>>>>Gracias por todo. Un saludo.
>>>>>




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