ldap3 在 conn.search 之后将用户添加到组
ldap3 add user to group after conn.search
目前,我正在编写一个 AWS Lambda 函数,其想法是,某人可以使用用户名和 AD 组向特定地址发送电子邮件,它会触发该函数并将此人添加到所需的组中。
我正在使用 python 模块 ldap3,conn.search 部分和 addUsersInGroup 都在工作,但前提是我 运行 单独使用它。如果我创建一个脚本,其中我已经拥有用户和组的 cn 或 dn 名称并使用 addUsersInGroup 函数它可以工作,但是如果我在它之前的某处执行 conn.search 不知何故无法建立连接-到分组部分。
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 会阻止任何与搜索相关的连接,如果尝试对不同的内容使用相同的连接,例如将用户添加到组,该请求被阻止。
这是我收到的错误:
Error_Message
在这个网站上找到了解决方法:
https://github.com/cannatag/ldap3/issues/442
You are getting this error probably due to auto_referrals=True in Connection by default. Try to use:
conn = Connection(server, "cn=xxx,cn=users,dc=wwww,dc=zzzz,dc=com", "my_pass", auto_bind=True, auto_referrals=False) and do not search and another DC.
目前,我正在编写一个 AWS Lambda 函数,其想法是,某人可以使用用户名和 AD 组向特定地址发送电子邮件,它会触发该函数并将此人添加到所需的组中。
我正在使用 python 模块 ldap3,conn.search 部分和 addUsersInGroup 都在工作,但前提是我 运行 单独使用它。如果我创建一个脚本,其中我已经拥有用户和组的 cn 或 dn 名称并使用 addUsersInGroup 函数它可以工作,但是如果我在它之前的某处执行 conn.search 不知何故无法建立连接-到分组部分。
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 会阻止任何与搜索相关的连接,如果尝试对不同的内容使用相同的连接,例如将用户添加到组,该请求被阻止。
这是我收到的错误:
Error_Message
在这个网站上找到了解决方法: https://github.com/cannatag/ldap3/issues/442
You are getting this error probably due to auto_referrals=True in Connection by default. Try to use: conn = Connection(server, "cn=xxx,cn=users,dc=wwww,dc=zzzz,dc=com", "my_pass", auto_bind=True, auto_referrals=False) and do not search and another DC.