2014-01-13 44 views
3

使用python-ldap,我想删除我的LDAP树的整个子树。用python递归删除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

我不认为有这样的选择。

您将不得不迭代和删除条目。 我想提到的一个问题是,除非在AD中有不同的设置,否则无法删除其下有对象的OU。

+0

可悲的是,这是我来到了答案......对于unability删除非空的OU,这是真的,即使在普通的LDAP(不使用AD但是使用openldap)。 –

3

对于那些谁可能在这个问题上后绊倒,这里有一个快速和肮脏的一块,我写了我自己(本质上讲@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)