仍在使用LDAP ...
我今天提交的问题是这样的:我正在使用Django框架在python中开发的自定义方法在服务器LDAP上创建一个posixGroup。我附上下面的方法代码。
主要问题是属性 gidNumber是posixGroup类的强制,但在使用像phpLDAPadmin这样的图形化LDAP客户端时通常不需要,因为它们会自动填充此字段自动整数
这里的问题是: gidNumber是默认的自动整数属性,还是只使用上面引用的客户端?我必须在创建posixGroup条目期间指定它吗?
def ldap_cn_entry(self):
import ldap.modlist as modlist
dn = u"cn=myGroupName,ou=plant,dc=ldap,dc=dem2m,dc=it"
# A dict to help build the "body" of the object
attrs = {}
attrs['objectclass'] = ['posixGroup']
attrs['cn'] = 'myGroupName'
attrs['gidNumber'] = '508'
# Convert our dict to nice syntax for the add-function using modlist-module
ldif = modlist.addModlist(attrs)
# Do the actual synchronous add-operation to the ldapserver
self.connector.add_s(dn, ldif)
我没有发布更多关于我没有在页面上进行的课程的代码 如果需要,我会提供更多信息。谢谢。
答案 0 :(得分:1)
LDAP协议没有自动整数的方法。
您需要在创建条目时指定值。
你可以做一些技巧来帮助你。 我们经常将最后使用的值放在OU上(我们在OU中添加一个带有自定义属性的AUX类),然后在使用gidNumber时读取,递增然后使用该值。
Found this described。 -Jim
答案 1 :(得分:1)
按照@jeemster的建议,我找到了管理gidNumber的方法。
所有的拳头:我在我的LDAP上创建了一个名为“gidNumber”的新条目,我添加了可选属性 description 以包含我使用的最后一个gidNumber(类:organizationalUnit,ou:gidNumber,description :500)。
然后我创建了以下功能:
def ldap_gid_finder(self):
# Locates the suport-entry with a simple query
self.baseDN = "ou=impianti,dc=ldap,dc=dem2m,dc=it"
self.searchScope = ldap.SCOPE_SUBTREE
self.retrieveAttributes = None
self.searchFilter = "ou=*gidNumber*"
# Results are putted in a dictionary
self.ldap_result = self.connector.search(
self.baseDN, self.searchScope, self.searchFilter, self.retrieveAttributes)
result_set = []
while 1:
result_type, result_data = self.connector.result(self.ldap_result, 0)
if (result_data == []):
break
else:
if result_type == ldap.RES_SEARCH_ENTRY:
result_set.append(result_data)
# The attribute containing gidNumber is passed to an instanced variable
self.actual_gid_number = int(result_set[0][0][1]['description'][0])
# Provides to gidNumber incrementation
def ldap_gid_increment(self):
dn = "ou=gidNumber,ou=impianti,dc=ldap,dc=dem2m,dc=it"
old = {'description': str(self.actual_gid_number)}
new = {'description': str(self.actual_gid_number + 1)}
ldif = modlist.modifyModlist(old,new)
self.connector.modify_s(dn, ldif)
上面我很遗憾,这些方法是在一个类中定义的,我覆盖了构造函数和析构函数,以便在实例化或删除实例时自动绑定/取消绑定到LDAP服务器。
然后,我在LDAP上使用查询来查找名为 gidNumber 的对象(我之前创建的ou),然后我用字典填充结果信息。在字典中,我找到了代表gidNumber的变量,我使用整数转换来操作它以进行递增。这就是全部。
这个程序我真的很高效,因为我服务器重新启动你不会丢失gidNumber信息!谢谢你,jeemster。