Рекурсивно удалить поддерево LDAP с помощью python

Используя python-ldap, я хочу удалить целое поддерево моего дерева LDAP.

Я придумал:

def ldap_recursive_delete_s(con, base_dn):
    search = con.search_s(base_dn, ldap.SCOPE_SUBTREE)
    delete_list = [dn for dn, _ in search]
    delete_list.reverse()

    for dn in delete_list:
        con.delete_s(dn)

Мне было интересно, есть ли какая-нибудь «рекурсивная» опция, например, с инструментом ldaprm CLI.


person Jocelyn delalande    schedule 13.01.2014    source источник


Ответы (2)


я не думаю, что есть такой вариант.

вам придется повторять и удалять записи. Один момент, о котором я хотел бы упомянуть, заключается в том, что вы не можете удалить OU с объектами под ним, если у вас нет другой настройки в AD.

person navendu    schedule 09.02.2014
comment
К сожалению, это ответ, к которому я пришел... Из-за невозможности удалить непустую OU, это правда, даже в обычном LDAP (не с использованием AD, а с помощью openldap). - person Jocelyn delalande; 10.02.2014

Для тех, кто может наткнуться на этот вопрос позже, вот быстрый и грязный кусок, который я написал для себя (по сути, что говорит @navendu):

def recursive_delete(conn, base_dn):
    search = conn.search_s(base_dn, ldap.SCOPE_ONELEVEL)

    for dn, _ in search:
        recursive_delete(conn, dn)

    print "Deleting: ", base_dn
    conn.delete_s(base_dn)
person UltraInstinct    schedule 31.03.2015
comment
Коротко и просто! Великолепно! - person Ken; 18.02.2021