目前,我正在编写一个AWS Lambda函数,它的想法是,有人可以发送电子邮件到一个特定的地址与用户名和AD组,它将触发该功能,并将这个人添加到所需的组。
我使用的是python模块ldap3,conn.search部分和addUsersInGroup都在工作,但前提是我单独运行它。如果我创建了一个脚本,其中我已经拥有用户和组的cn或dn名称,并且使用了addUsersInGroup函数,那么它就能工作,但是如果在conn.search之前做了一个conn.search,它就无法为addUsersInGroup部分建立连接。
from ldap3 import Server, Connection, ALL, NTLM, SUBTREE
from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addUsersInGroups
import email
import os
import json
email = "sample@test.com"
subject = "username,ad-group"
user = subject.split(",")[0]
group = subject.split(",")[1]
emaildomain = email.split("@")[1]
domaingroup = ["test.com"]
adgroups = ["group1","group2"]
server = Server('serverIP', use_ssl=True, get_info=ALL)
conn = Connection(server, OU,
password, auto_bind=True)
def find_user():
user_criteria = "(&(objectClass=user)(sAMAccountName=%s))"%user
if conn.search("OU", user_criteria):
result = str(conn.entries)
user_dn = result.split("-")[0].replace("[DN: ","")
return user_dn
return nouser
def find_group():
group_criteria = "(&(objectClass=group)(sAMAccountName=%s))"%group
if conn.search("OU", group_criteria):
result_group = str(conn.entries)
group_dn = result_group.split("-")[0].replace("[DN: ","")
return group_dn
return nogroup
def add_to_group(user,group):
addUsersInGroups(conn,user,group)
if emaildomain in domaingroup:
user = find_user()
group = find_group()
add_to_group(user,group)
请注意,出于安全原因,我不得不删除脚本中的一些内容。连接搜索用户或组是有效的,如果我运行添加到组的功能,它也工作,但只运行它之前没有任何搜索。
不知怎么的,我觉得让conn.search阻塞任何与搜索相关的连接,如果尝试将相同的连接用于不同的东西,例如向组中添加一个用户,该请求就会被阻塞。
以下是我收到的错误:
发布于 2020-06-22 07:21:19
在这个网站上找到了解决方案:https://github.com/cannatag/ldap3/issues/442
默认情况下,您将得到此错误,这可能是由于连接中的auto_referrals=True造成的。尝试使用: conn =Connection(服务器,"cn=xxx,cn=users,dc=wwww,dc=zzzz,dc=com","my_pass",auto_bind=True,auto_bind=True,不要搜索和另一个DC。
https://stackoverflow.com/questions/62466809
复制相似问题