使用python以递归方式删除LDAP子树

时间:2014-01-13 10:18:59

标签: python recursion ldap python-ldap

使用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工具。

2 个答案:

答案 0 :(得分:4)

对于那些可能在以后偶然发现这个问题的人来说,这是我为自己写的一篇快速而又肮脏的文章(基本上是@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)

答案 1 :(得分:2)

我不认为有这样的选择。

您必须迭代并删除条目。 我要提到的一个问题是你不能删除包含对象的OU,除非你在AD中有不同的设置。