The branch, master has been updated via cc9d4d5... s4-drs: use -r to ldbdel in unvampire devel script via ff984cd... s4-ldb: fixed ldbdel with -r (recursive deletion) from b2d8e11... s4:build Bump ldb and tdb required versions.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit cc9d4d51814054d91afeb17e62ded3087bc864ff Author: Andrew Tridgell <tri...@samba.org> Date: Tue Dec 8 14:42:08 2009 +1100 s4-drs: use -r to ldbdel in unvampire devel script This ensures we delete any nTDSConnection objects commit ff984cdfac3638e75fdc764d45899fbabb17d291 Author: Andrew Tridgell <tri...@samba.org> Date: Tue Dec 8 14:40:20 2009 +1100 s4-ldb: fixed ldbdel with -r (recursive deletion) We need to delete the deepest DNs first ----------------------------------------------------------------------- Summary of changes: source4/lib/ldb/tools/ldbdel.c | 15 +++++++++++++++ source4/scripting/devel/drs/unvampire_ad.sh | 7 +++---- 2 files changed, 18 insertions(+), 4 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/lib/ldb/tools/ldbdel.c b/source4/lib/ldb/tools/ldbdel.c index ddf168d..5740f22 100644 --- a/source4/lib/ldb/tools/ldbdel.c +++ b/source4/lib/ldb/tools/ldbdel.c @@ -34,6 +34,14 @@ #include "ldb.h" #include "tools/cmdline.h" +static int dn_cmp(const void *p1, const void *p2) +{ + const struct ldb_message *msg1, *msg2; + msg1 = *(const struct ldb_message * const *)p1; + msg2 = *(const struct ldb_message * const *)p2; + return ldb_dn_compare(msg1->dn, msg2->dn); +} + static int ldb_delete_recursive(struct ldb_context *ldb, struct ldb_dn *dn) { int ret, i, total=0; @@ -43,9 +51,16 @@ static int ldb_delete_recursive(struct ldb_context *ldb, struct ldb_dn *dn) ret = ldb_search(ldb, ldb, &res, dn, LDB_SCOPE_SUBTREE, attrs, "distinguishedName=*"); if (ret != LDB_SUCCESS) return -1; + /* sort the DNs, deepest first */ + qsort(res->msgs, res->count, sizeof(res->msgs[0]), dn_cmp); + for (i = 0; i < res->count; i++) { if (ldb_delete(ldb, res->msgs[i]->dn) == 0) { total++; + } else { + printf("Failed to delete '%s' - %s\n", + ldb_dn_get_linearized(res->msgs[i]->dn), + ldb_errstring(ldb)); } } diff --git a/source4/scripting/devel/drs/unvampire_ad.sh b/source4/scripting/devel/drs/unvampire_ad.sh index e4b9dcc..7f9763e 100755 --- a/source4/scripting/devel/drs/unvampire_ad.sh +++ b/source4/scripting/devel/drs/unvampire_ad.sh @@ -5,8 +5,7 @@ set -x . `dirname $0`/vars -bin/ldbdel -H ldap://$server.$DNSDOMAIN -U$workgroup/administrator%$pass "CN=$machine,CN=Computers,$dn" -bin/ldbdel -H ldap://$server.$DNSDOMAIN -U$workgroup/administrator%$pass "CN=$machine,OU=Domain Controllers,$dn" -bin/ldbdel -H ldap://$server.$DNSDOMAIN -U$workgroup/administrator%$pass "CN=NTDS Settings,CN=$machine,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,$dn" -bin/ldbdel -H ldap://$server.$DNSDOMAIN -U$workgroup/administrator%$pass "CN=$machine,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,$dn" +bin/ldbdel -r -H ldap://$server.$DNSDOMAIN -U$workgroup/administrator%$pass "CN=$machine,CN=Computers,$dn" +bin/ldbdel -r -H ldap://$server.$DNSDOMAIN -U$workgroup/administrator%$pass "CN=$machine,OU=Domain Controllers,$dn" +bin/ldbdel -r -H ldap://$server.$DNSDOMAIN -U$workgroup/administrator%$pass "CN=$machine,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,$dn" rm -f $PREFIX/private/*.ldb -- Samba Shared Repository