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.