r9816: Work on testsuite for upgrade
authorJelmer Vernooij <jelmer@samba.org>
Wed, 31 Aug 2005 02:39:57 +0000 (02:39 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:35:04 +0000 (13:35 -0500)
Add 'paths' object to provision code.
(This used to be commit 488d737fb0ebbc2535d0ec17c14f0dc1eaf2a578)

source4/lib/samba3/PLAN
source4/lib/samba3/samba3.c
source4/script/tests/test_s3upgrade.sh [new file with mode: 0755]
source4/scripting/libjs/provision.js
source4/scripting/libjs/upgrade.js
source4/setup/provision
source4/setup/upgrade
swat/install/provision.esp
swat/install/samba3.esp

index f6cdf1cce40a049bf9bc86bd0a6625d876fc8f8a..8c1a6735358e8156a2c3b88ff28833d69539f732 100644 (file)
@@ -1,3 +1,3 @@
 TODO (SoC project):
 TODO (SoC project):
- - test ldb_map backend (testsuite?)
+ - finish ldb_map testsuite
  - testsuite for the static upgrade
  - testsuite for the static upgrade
index 8d5ad7718586812bf97408c803ca3c63176c1fcf..b9bb6d736215eea398558a0d7651868b8650a33d 100644 (file)
@@ -88,9 +88,12 @@ NTSTATUS samba3_read(const char *libdir, const char *smbconf, TALLOC_CTX *ctx, s
 
        ret = talloc_zero(ctx, struct samba3);
 
 
        ret = talloc_zero(ctx, struct samba3);
 
-       if (smbconf) {
+       if (smbconf != NULL) {
                ret->configuration = param_init(ret);
                ret->configuration = param_init(ret);
-               param_read(ret->configuration, smbconf);
+               if (param_read(ret->configuration, smbconf) == -1) {
+                       talloc_free(ret);
+                       return NT_STATUS_UNSUCCESSFUL;
+               }
        }
 
        dbfile = talloc_asprintf(ctx, "%s/account_policy.tdb", libdir);
        }
 
        dbfile = talloc_asprintf(ctx, "%s/account_policy.tdb", libdir);
diff --git a/source4/script/tests/test_s3upgrade.sh b/source4/script/tests/test_s3upgrade.sh
new file mode 100755 (executable)
index 0000000..b0042be
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+PREFIX=$1
+
+if [ -z "$PREFIX" ]
+then
+       print "Usage: test_s3upgrade.sh <prefix"
+       exit 1
+fi
+
+DATADIR=$PREFIX/upgrade
+
+mkdir -p $DATADIR
+rm -f $DATADIR/*
+
+bin/smbscript setup/upgrade --targetdir=$DATADIR ../testdata/samba3 ../testdata/samba3/smb.conf
+
+# FIXME: Do some sanity checks on the output files
index 9607d6f2749226e6174ee997c77cae0b6139de9a..ef99dc43c553e17787c14a1a6aa3cf234e9900a6 100644 (file)
@@ -199,16 +199,34 @@ function setup_file(template, fname, subobj)
        assert(ok);
 }
 
        assert(ok);
 }
 
+function provision_default_paths(subobj)
+{
+       var lp = loadparm_init();
+       var paths = new Object();
+       paths.smbconf = lp.get("config file");
+       paths.hklm = "hklm.ldb";
+       paths.hkcu = "hkcu.ldb";
+       paths.hkcr = "hkcr.ldb";
+       paths.hku = "hku.ldb";
+       paths.hkpd = "hkpd.ldb";
+       paths.hkpt = "hkpt.ldb";
+       paths.samdb = "sam.ldb";
+       paths.rootdse = "rootdse.ldb";
+       paths.secrets = "secrets.ldb";
+       paths.dns = lp.get("private dir") + "/" + subobj.DNSDOMAIN + ".zone";
+       paths.winsdb = "wins.ldb";
+       return paths;
+}
+
 /*
   provision samba4 - caution, this wipes all existing data!
 */
 /*
   provision samba4 - caution, this wipes all existing data!
 */
-function provision(subobj, message, blank)
+function provision(subobj, message, blank, paths)
 {
        var data = "";
        var lp = loadparm_init();
        var sys = sys_init();
 {
        var data = "";
        var lp = loadparm_init();
        var sys = sys_init();
-       var smbconf = lp.get("config file");
-
+       
        /*
          some options need to be upper/lower case
        */
        /*
          some options need to be upper/lower case
        */
@@ -228,31 +246,31 @@ function provision(subobj, message, blank)
        provision_next_usn = 1;
 
        /* only install a new smb.conf if there isn't one there already */
        provision_next_usn = 1;
 
        /* only install a new smb.conf if there isn't one there already */
-       var st = sys.stat(smbconf);
+       var st = sys.stat(paths.smbconf);
        if (st == undefined) {
                message("Setting up smb.conf\n");
        if (st == undefined) {
                message("Setting up smb.conf\n");
-               setup_file("provision.smb.conf", smbconf, subobj);
+               setup_file("provision.smb.conf", paths.smbconf, subobj);
                lp.reload();
        }
        message("Setting up hklm.ldb\n");
                lp.reload();
        }
        message("Setting up hklm.ldb\n");
-       setup_ldb("hklm.ldif", "hklm.ldb", subobj);
+       setup_ldb("hklm.ldif", paths.hklm, subobj);
        message("Setting up sam.ldb attributes\n");
        message("Setting up sam.ldb attributes\n");
-       setup_ldb("provision_init.ldif", "sam.ldb", subobj);
+       setup_ldb("provision_init.ldif", paths.samdb, subobj);
        message("Setting up sam.ldb templates\n");
        message("Setting up sam.ldb templates\n");
-       setup_ldb("provision_templates.ldif", "sam.ldb", subobj, NULL, false);
+       setup_ldb("provision_templates.ldif", paths.samdb, subobj, NULL, false);
        message("Setting up sam.ldb data\n");
        message("Setting up sam.ldb data\n");
-       setup_ldb("provision.ldif", "sam.ldb", subobj, NULL, false);
+       setup_ldb("provision.ldif", paths.samdb, subobj, NULL, false);
        if (blank == false) {
                message("Setting up sam.ldb users and groups\n");
        if (blank == false) {
                message("Setting up sam.ldb users and groups\n");
-               setup_ldb("provision_users.ldif", "sam.ldb", subobj, data, false);
+               setup_ldb("provision_users.ldif", paths.samdb, subobj, data, false);
        }
        message("Setting up rootdse.ldb\n");
        }
        message("Setting up rootdse.ldb\n");
-       setup_ldb("rootdse.ldif", "rootdse.ldb", subobj);
+       setup_ldb("rootdse.ldif", paths.rootdse, subobj);
        message("Setting up secrets.ldb\n");
        message("Setting up secrets.ldb\n");
-       setup_ldb("secrets.ldif", "secrets.ldb", subobj);
+       setup_ldb("secrets.ldif", paths.secrets, subobj);
        message("Setting up DNS zone file\n");
        setup_file("provision.zone", 
        message("Setting up DNS zone file\n");
        setup_file("provision.zone", 
-                  lp.get("private dir") + "/" + subobj.DNSDOMAIN + ".zone"
+                  paths.dns
                   subobj);
 }
 
                   subobj);
 }
 
index 0e12d7c3452611a79d40c7d78a5eb38797d1ff82..4fe6b8cc1ec62bc1f13d0876135307a5ea30d108 100644 (file)
@@ -403,17 +403,17 @@ function upgrade_smbconf(oldconf,mark)
        return newconf;
 }
 
        return newconf;
 }
 
-function upgrade(subobj, samba3, message)
+function upgrade(subobj, samba3, message, paths)
 {
        var ret = 0;
        var lp = loadparm_init();
        var samdb = ldb_init();
 {
        var ret = 0;
        var lp = loadparm_init();
        var samdb = ldb_init();
-       var ok = samdb.connect("sam.ldb");
+       var ok = samdb.connect(paths.samdb);
        assert(ok);
 
        message("Writing configuration\n");
        var newconf = upgrade_smbconf(samba3.configuration,true);
        assert(ok);
 
        message("Writing configuration\n");
        var newconf = upgrade_smbconf(samba3.configuration,true);
-       newconf.save(lp.get("config file"));
+       newconf.save(paths.smbconf);
 
        message("Importing account policies\n");
        var ldif = upgrade_sam_policy(samba3,subobj.BASEDN);
 
        message("Importing account policies\n");
        var ldif = upgrade_sam_policy(samba3,subobj.BASEDN);
@@ -474,11 +474,12 @@ dn: @MAP=samba3sam
        message("Importing registry data\n");
        var hives = new Array("hkcr","hkcu","hklm","hkpd","hku","hkpt"); 
        for (var i in hives) {
        message("Importing registry data\n");
        var hives = new Array("hkcr","hkcu","hklm","hkpd","hku","hkpt"); 
        for (var i in hives) {
-               message("... " + hives[i] + "\n");
+               var hn = hives[i];
+               message("... " + hn + "\n");
                var regdb = ldb_init();
                var regdb = ldb_init();
-               ok = regdb.connect(hives[i] + ".ldb");
+               ok = regdb.connect(paths[hn]);
                assert(ok);
                assert(ok);
-               var ldif = upgrade_registry(samba3.registry, hives[i]);
+               var ldif = upgrade_registry(samba3.registry, hn);
                for (var j in ldif) {
                        message("... ... " + j);
                        ok = regdb.add(ldif[j]);
                for (var j in ldif) {
                        message("... ... " + j);
                        ok = regdb.add(ldif[j]);
@@ -492,7 +493,7 @@ dn: @MAP=samba3sam
 
        message("Importing WINS data\n");
        var winsdb = ldb_init();
 
        message("Importing WINS data\n");
        var winsdb = ldb_init();
-       ok = winsdb.connect("wins.ldb");
+       ok = winsdb.connect(paths.winsdb);
        assert(ok);
        ldb_erase(winsdb);
 
        assert(ok);
        ldb_erase(winsdb);
 
@@ -500,8 +501,5 @@ dn: @MAP=samba3sam
        ok = winsdb.add(ldif);
        assert(ok);
 
        ok = winsdb.add(ldif);
        assert(ok);
 
-       message("Reloading smb.conf\n");
-       lp.reload();
-
        return ret;
 }
        return ret;
 }
index b3be19771001231df6d41233cfd9c0b9b2619574..fd949ce9d99d68ca191b8b4a29dd6bb195b439a9 100755 (executable)
@@ -110,6 +110,6 @@ var blank = (options["blank"] != undefined);
 
 message("Provisioning for %s in realm %s\n", subobj.DOMAIN, subobj.REALM);
 message("Using administrator password: %s\n", subobj.ADMINPASS);
 
 message("Provisioning for %s in realm %s\n", subobj.DOMAIN, subobj.REALM);
 message("Using administrator password: %s\n", subobj.ADMINPASS);
-provision(subobj, message, blank);
+provision(subobj, message, blank, provision_default_paths(subobj));
 message("All OK\n");
 return 0;
 message("All OK\n");
 return 0;
index 6f10096a45bc1dfd95f2f6f8b8eab35be714812f..331892c3db28bc61a8a7940f55a2b03d6baa9024 100755 (executable)
@@ -10,7 +10,7 @@ options = GetOptions(ARGV,
                "POPT_AUTOHELP",
                "POPT_COMMON_SAMBA",
                "POPT_COMMON_VERSION",
                "POPT_AUTOHELP",
                "POPT_COMMON_SAMBA",
                "POPT_COMMON_VERSION",
-               'ldif',
+               'targetdir=s',
                'quiet', 'blank');
 
 if (options == undefined) {
                'quiet', 'blank');
 
 if (options == undefined) {
@@ -32,13 +32,6 @@ function message()
        }
 }
 
        }
 }
 
-function ldifprint(data)
-{
-       if (options.ldif != undefined) {
-               print(data);
-       }
-}
-
 /*
  show some help
 */
 /*
  show some help
 */
@@ -48,7 +41,7 @@ function ShowHelp()
 Samba4 import tool
 
 provision [options] <libdir> <smbconf>
 Samba4 import tool
 
 provision [options] <libdir> <smbconf>
- --ldif                                Dump LDIF
+ --targetdir=DIR    Output to specified directory
  --quiet                       Be quiet
  --blank                       do not add users or groups, just the structure
 
  --quiet                       Be quiet
  --blank                       do not add users or groups, just the structure
 
@@ -73,11 +66,27 @@ if (samba3 == undefined) {
        exit(1);
 }
 
        exit(1);
 }
 
+
+
 message("Provisioning\n");
 var subobj = upgrade_provision(samba3);
 message("Provisioning\n");
 var subobj = upgrade_provision(samba3);
-provision(subobj, message, options.blank);
+var paths;
+if (options.targetdir != undefined) {
+       paths = new Object();
+       paths.smbconf = sprintf("%s/smb.conf", options.targetdir);
+       var ldbs = new Array("hklm","hkcr","hku","hkcu","hkpd","hkpt","samdb","rootdse","secrets","winsdb");
+       for (var i in ldbs) {
+               var n = ldbs[i];
+               paths[n] = sprintf("tdb://%s/%s.ldb", options.targetdir, n);
+       }
+       paths.dns = options.targetdir+"/dns.zone";
+} else {
+       paths = provision_default_paths(subobj);;
+}
+
+provision(subobj, message, options.blank,paths);
 
 
-var ret = upgrade(subobj,samba3,message);
+var ret = upgrade(subobj,samba3,message,paths);
 if (ret > 0) {
        message("Failed to import %d entries\n", ret);
 } else {
 if (ret > 0) {
        message("Failed to import %d entries\n", ret);
 } else {
index 714b498b22f9f4d3a592c733ab441bd5837bd51b..de823ddcde14f6dab4a8e6c3130eb7fd3735f292 100644 (file)
@@ -59,7 +59,7 @@ if (form['submit'] == "Provision") {
                write("<h3>You must choose an administrator password.  Please try again.</h3>");
                f.display();
        } else {
                write("<h3>You must choose an administrator password.  Please try again.</h3>");
                f.display();
        } else {
-               provision(subobj, writefln, false);
+               provision(subobj, writefln, false, provision_default_paths(subobj));
        }
 } else {
        f.display();
        }
 } else {
        f.display();
index 729dcc74fdcd6ac28470bc4e2d13ca2bfd227e78..5228ca6f863a0263c7208394d5334e70c6dd27a1 100644 (file)
@@ -53,8 +53,14 @@ if (form['submit'] == "Import") {
        for (r in form) {
                subobj[r] = form[r];
        }
        for (r in form) {
                subobj[r] = form[r];
        }
-       provision(subobj, writefln, true);
-       upgrade(subobj, samba3, writefln);
+       var paths = provision_default_paths(subobj);
+
+       provision(subobj, writefln, true, paths);
+       upgrade(subobj, samba3, writefln, paths);
+
+       writefln("Reloading smb.conf\n");
+       var lp = loadparm_init();
+       lp.reload();
 } else {
        var f = FormObj("Import from Samba3", 0, 2);
 
 } else {
        var f = FormObj("Import from Samba3", 0, 2);