ldap3 добавляет пользователя в группу после conn.search - PullRequest
0 голосов
/ 19 июня 2020

в настоящее время я пишу функцию AWS Lambda, и идея состоит в том, что кто-то может отправить электронное письмо на указанный c адрес с именем пользователя и группой AD, и это вызовет функцию и добавит этого человека в желаемая группа.

Я использую python модуль ldap3, и часть conn.search работает, а также addUsersInGroup, но только если я запускаю ее отдельно. Если я создаю сценарий, в котором у меня уже есть имя cn или dn как для пользователя, так и для группы, и использую функцию addUsersInGroup, он работает, но если я выполняю conn.search где-нибудь, прежде чем он каким-то образом не сможет установить соединение для sh часть добавления в группу.

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)

Обратите внимание, что мне пришлось удалить некоторые вещи из скрипта по соображениям безопасности. Соединение для поиска пользователя или группы работает, и если я запускаю функцию добавления в группу, она тоже работает, но только запускает ее без предварительного поиска.

Почему-то у меня такое ощущение, что соединение .search блокирует соединение для всего, что связано с поиском, и если попытаться использовать одно и то же соединение для чего-то другого, например, для добавления пользователя в группу, этот запрос блокируется.

Вот полученная мной ошибка:

Сообщение об ошибке

1 Ответ

0 голосов
/ 22 июня 2020

Решение найдено на этом веб-сайте: https://github.com/cannatag/ldap3/issues/442

Вы получаете эту ошибку, вероятно, из-за auto_referrals = True в Connection по умолчанию. Попробуйте использовать: conn = Connection (server, «cn = xxx, cn = users, dc = w www,dc=zzzz, dc = com», «my_pass», auto_bind = True, auto_referrals = False ) и не ищи а другой D C.

...