source para open libreria library example python ldap python-ldap

python - para - Cómo recuperar todos los atributos de la base de datos LDAP



python ldap para windows (3)

Estoy usando el módulo ldap de python para conectarme al servidor ldap . Puedo consultar la base de datos, pero no sé cómo recuperar los campos presentes en la base de datos , de modo que puedo notificar al usuario con antelación para consultar la base de datos, diciéndole que el campo al que está intentando acceder no está en la base de datos .

Por ejemplo, si los campos presentes son solo

cn memberOf

y si el usuario intenta consultar la base de datos con filtro

cn and memberOf and notcontained

Debería ser capaz de saber que el atributo no contento no está en el esquema de dabase.

Cómo puedo lograr esto.

Gracias.


Estoy usando el módulo ldap de python para conectarme al servidor ldap. Puedo consultar la base de datos, pero no sé cómo recuperar los campos presentes en la base de datos, de modo que puedo notificar al usuario con antelación para consultar la base de datos, diciéndole que el campo al que está intentando acceder no está en la base de datos .

Una solución simple sería buscar e imprimir una lista de las claves del resultado.

import ldap # connect to your ldap server some_dn = ''...'' # Your base dn some_lookup = ''...'' # your lookup attr result = conn.search_s(some_dn,ldap.SCOPE_SUBTREE,some_lookup) result[0][1].keys()

Por ejemplo, contra mi servidor AD, devuelve lo siguiente:

[''mailNickname'', ''publicDelegatesBL'', ''logonCount'', ''cn'', ''countryCode'', ''dSCorePropagationData'', ''objectClass'', # ... many many more ''telephoneNumber'', ''physicalDeliveryOfficeName'', ''name'', ''memberOf'', ''codePage'', ''userAccountControl'', ''msExchMDBRulesQuota'', ''lastLogon'', ''protocolSettings'', ''uSNChanged'', ''sn'', ''msExchVersion'', ''mDBUseDefaults'', ''givenName'', ''msExchMailboxGuid'', ''lastLogoff'']


La raíz DSE y posible base DN del esquema

Suponiendo que al cliente LDAP solo le importa qué atributos están definidos en el esquema (ver extensibleObject continuación), para determinar si un attribute está definido en el esquema del servidor, recupere el esquema. En muchos servidores de directorio, el DN base (u objeto base) para el esquema se define en el atributo subSchemaSubEntry que podría estar presente en la raíz DSE. Para obtener más información acerca de la raíz DSE, vea LDAP: The Root DSE . Para recuperar los contenidos del DSE raíz, transmita una solicitud de búsqueda al servidor que consista en un objeto base de '''' y un alcance de búsqueda de base , y una lista de atributos solicitada que comprenda * y + .

extensibleObject

Tenga en cuenta que la presencia de objectClass extensibleObject permite a los clientes LDAP agregar cualquier nombre y valor de atributo que requieran, al igual que un bloque común de basura FORTRAN, es decir, los atributos podrían estar presentes en una entrada pero no definidos en el esquema.

SubSchemaSubEntry no presente

Si el atributo subSchemaSubEntry no está presente, póngase en contacto con los administradores del servidor y solicite información sobre cómo recuperar el esquema y sobre los derechos de acceso suficientes para hacerlo.

SubSchemaSubEntry presente

Si el atributo subSchemaSubEntry está presente, lea el esquema transmitiendo una solicitud de búsqueda al servidor utilizando el valor del atributo subSchemaSubEntry como el objeto base, un alcance de búsqueda de one y una lista de atributos solicitada consistente de * y + . Las definiciones de tipo de atributo y las definiciones de objectClass están contenidas en el esquema.


Necesita leer el esquema de su servidor ldap.

Este código puede funcionar para usted, como tempalte

#!/usr/bin/env python #coding:utf-8 # Author: peter --<[email protected]> # Purpose: Tareas comunes a utilizar con respecto a schemas ldap # Created: 01/05/12 import ldap import ldap.schema ######################################################################## class SchemasIPA(object): __ldaps = ldap.schema #---------------------------------------------------------------------- def __init__(self, url): """Constructor""" ldap._trace_level = 0 ldap.set_option(ldap.OPT_DEBUG_LEVEL,0) subschemasubentry_dn, self.schema = ldap.schema.urlfetch(url,ldap._trace_level) self.oc_tree = self.schema.tree(ldap.schema.ObjectClass) self.at_tree = self.schema.tree(ldap.schema.AttributeType) def getobjectclasses(self): """ trae la listas de objectclasses de un servidor dado """ allobjc = {} for a in self.oc_tree.keys(): objc = self.schema.get_obj(ldap.schema.ObjectClass, a) if objc != None: allobjc[objc.oid] = (objc.names, objc.must, objc.may, objc.sup, objc.obsolete) return allobjc def getatributes(self): """ trae la lista de atributos de un servidor dado """ allatt= {} o = [] for a in self.at_tree.keys(): att = self.schema.get_obj(ldap.schema.AttributeType, a) if att != None: allatt[att.oid] = (att.names, att.syntax, att.syntax_len, att.desc, att.collective, att.equality, att.single_value) return allatt def getvalidoid(self, objects): """ retorno un valor oid libre valida para la creacion de esquemas y atributos el proceso valido es pedirle a la iana un oid valido, pero se tarda mas de un mes los oid a utilizar son valores predefinidos al momento de la instalacion del servidor ldap """ pass if __name__ == ''__main__'': sch = SchemasIPA(''ldap://localhost'') #at = sch.getatributes() ob = sch.getobjectclasses() for a, b in ob.iteritems(): print a print b[0]

Entonces puedes envolver esta clase de esta manera

#a file contained the above class import schemas olschemas = schemas.SchemasIPA(url=''ldap://192.168.1.81'') #here are, some magic :) pa = olschemas.schema.get_obj(olschemas._SchemasIPA__ldaps.ObjectClass, ''posixaccount'') pa.must #going to print all the attributes that can''t be null''s pa.may #going to print all the attributes that are optional''s