0

目前,我正在编写一个 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)

请注意,出于安全原因,我不得不从脚本中删除一些内容。搜索用户或组的连接正在工作,如果我运行 add-to-group 功能,它也可以工作,但只运行它而不事先进行任何搜索。

不知何故,我觉得 conn.search 会阻止任何与搜索相关的连接,如果尝试将相同的连接用于不同的东西,例如将用户添加到组,则该请求会被阻止。

这是我收到的错误:

错误信息

4

1 回答 1

0

在这个网站上找到了解决方案: https ://github.com/cannatag/ldap3/issues/442

您收到此错误可能是由于默认情况下连接中的 auto_referrals=True。尝试使用: conn = Connection(server, "cn=xxx,cn=users,dc=wwww,dc=zzzz,dc=com", "my_pass", auto_bind=True, auto_referrals=False ) 并且不要搜索和另一个直流。

于 2020-06-22T07:21:19.820 回答