r8570: delete all records in the old db when provisioning, rather than using
[bbaumbach/samba-autobuild/.git] / source4 / scripting / libjs / provision.js
index c7fb1b5fc5188be874988f10795e06fedf212bee..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);
 }
@@ -196,6 +220,8 @@ function provision(subobj, message)
 function provision_guess()
 {
        var subobj = new Object();
+       var nss = nss_init();
+
        subobj.REALM        = lpGet("realm");
        subobj.DOMAIN       = lpGet("workgroup");
        subobj.HOSTNAME     = hostname();
@@ -213,11 +239,11 @@ function provision_guess()
        subobj.LDAPTIME     = ldaptime;
        subobj.DATESTRING   = datestring;
        subobj.USN          = nextusn;
-       subobj.ROOT         = findnss(getpwnam, "root");
-       subobj.NOBODY       = findnss(getpwnam, "nobody");
-       subobj.NOGROUP      = findnss(getgrnam, "nogroup", "nobody");
-       subobj.WHEEL        = findnss(getgrnam, "wheel", "root");
-       subobj.USERS        = findnss(getgrnam, "users", "guest", "other");
+       subobj.ROOT         = findnss(nss.getpwnam, "root");
+       subobj.NOBODY       = findnss(nss.getpwnam, "nobody");
+       subobj.NOGROUP      = findnss(nss.getgrnam, "nogroup", "nobody");
+       subobj.WHEEL        = findnss(nss.getgrnam, "wheel", "root");
+       subobj.USERS        = findnss(nss.getgrnam, "users", "guest", "other");
        subobj.DNSDOMAIN    = strlower(subobj.REALM);
        subobj.DNSNAME      = sprintf("%s.%s", 
                                      strlower(subobj.HOSTNAME),