r8570: delete all records in the old db when provisioning, rather than using
authorAndrew Tridgell <tridge@samba.org>
Tue, 19 Jul 2005 02:10:08 +0000 (02:10 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:29:39 +0000 (13:29 -0500)
sys.unlink(). This allows smbd to see the new db without restarting.
(This used to be commit 71004aa165e88f5f448dc7d90ad11dea7143f0df)

source4/scripting/libjs/provision.js

index 7133e50b4c24eaeed0a1e548b79767c2a378277b..5ce9c8886fac4a24a0b507067a9844309adcfbad 100644 (file)
@@ -110,6 +110,30 @@ function hostname()
 }
 
 
+/*
+  erase an ldb, removing all records
+*/
+function ldb_erase(ldb)
+{
+       var attrs = new Array("dn");
+
+       /* delete the specials */
+       ldb.del("@INDEXLIST");
+       ldb.del("@ATTRIBUTES");
+       ldb.del("@SUBCLASSES");
+       ldb.del("@MODULES");
+
+       /* and the rest */
+       var res = ldb.search("(|(objectclass=*)(dn=*))", attrs);
+       var i;
+       for (i=0;i<res.length;i++) {
+               ldb.del(res[i].dn);
+       }
+       res = ldb.search("(objectclass=*)", attrs);
+       assert(res.length == 0);
+}
+
+
 /*
   setup a ldb in the private dir
  */
@@ -125,8 +149,6 @@ function setup_ldb(ldif, dbname, subobj)
        var dbfile = lpGet("private dir") + "/" + dbname;
        var src = lpGet("setup directory") + "/" + ldif;
 
-       sys.unlink(dbfile);
-
        var data = sys.file_load(src);
        data = data + extra;
        data = substitute_var(data, subobj);
@@ -134,6 +156,8 @@ function setup_ldb(ldif, dbname, subobj)
        var ok = ldb.connect(dbfile);
        assert(ok);
 
+       ldb_erase(ldb);
+
        ok = ldb.add(data);
        assert(ok);
 }