2014-01-13 66 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)