gpt4 book ai didi

python - 如何检索 LDAP 数据库的所有属性

转载 作者:太空狗 更新时间:2023-10-30 00:46:08 25 4
gpt4 key购买 nike

我正在使用pythonldap 模块 连接到ldap 服务器。我能够查询数据库,但我不知道如何检索数据库中存在的字段,以便我可以提前通知用户查询数据库,告诉他说他试图访问的字段不在数据库中。

例如,如果存在的字段只是

cn
memberOf

如果用户尝试使用过滤器查询数据库

cn and memberOf and notcontained

我应该能够知道 notcontained 属性不在数据库架构中。

我怎样才能做到这一点。

谢谢。

最佳答案

您需要阅读 ldap 服务器的架构。

这段代码可能对你有用,作为模板

#!/usr/bin/env python
#coding:utf-8
# Author: peter --<pjl@hpc.com.py>
# 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]

然后你可以像这样包装这个类

#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

关于python - 如何检索 LDAP 数据库的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11411847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com