我正在使用这个库与Python中的Active Directory进行交互:
http://timgolden.me.uk/python/ad_cookbook.html
我正在尝试像这样访问组名称:
groups = []
for group in active_directory.search(objectClass='group'):
groups.append(str(group.cn))
我的第一个问题是group.cn
获取组的显示名称而不是实际的对象名称。如何获取对象名称?
我的第二个问题是运行此代码会占用大量内存。当Active Directory中有数千个组时,我的程序将使用数百个兆甚至一两个兆兆的内存。当有组嵌套在其他组中时尤其如此。有没有理由在我得到所有组名后,我仍然在使用所有这些内存?
这就是我最终所做的:
results = None
try:
connection = ldap.open(str(self.hostnameLineEdit.text()))
connection.simple_bind_s(str(self.usernameLineEdit.text()), str(self.passwordLineEdit.text()))
userDNSDomain = os.environ['USERDNSDOMAIN']
userDNSDomain = userDNSDomain.split('.')
base = ""
for dc in userDNSDomain:
base += "dc=" + dc + ","
base = base[:-1]
#print base
resultID = connection.search(base,ldap.SCOPE_SUBTREE,'(objectClass=group)')
resultTypes, results = connection.result(resultID, 0)
except ldap.LDAPError, e:
self.messageBox("LDAP Error: " + str(e))
if results != None:
while results[0][0] != None:
#print results[0][1]['cn']
self.groupsListWidget.addItem(QString(results[0][1]['cn'][0]))
resultTypes, results = connection.result(resultID, 0)