svn commit: samba r26596 - in branches/SAMBA_4_0: . source/lib/registry/tests source/param source/scripting/python/samba source/scripting/python/samba/tests source/selftest source/setup

jelmer at samba.org jelmer at samba.org
Tue Dec 25 16:36:47 GMT 2007


Author: jelmer
Date: 2007-12-25 16:36:44 +0000 (Tue, 25 Dec 2007)
New Revision: 26596

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26596

Log:
Fixed upgrade.py.
Added blackbox tests for provision and upgrade Python scripts.
Clean up temporary files created by the Python tests.

Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/lib/registry/tests/bindings.py
   branches/SAMBA_4_0/source/param/param.i
   branches/SAMBA_4_0/source/param/param_wrap.c
   branches/SAMBA_4_0/source/scripting/python/samba/__init__.py
   branches/SAMBA_4_0/source/scripting/python/samba/provision.py
   branches/SAMBA_4_0/source/scripting/python/samba/tests/__init__.py
   branches/SAMBA_4_0/source/scripting/python/samba/tests/provision.py
   branches/SAMBA_4_0/source/scripting/python/samba/upgrade.py
   branches/SAMBA_4_0/source/selftest/samba4_tests.sh
   branches/SAMBA_4_0/source/setup/provision.py
   branches/SAMBA_4_0/source/setup/upgrade.py


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...

Modified: branches/SAMBA_4_0/source/lib/registry/tests/bindings.py
===================================================================
--- branches/SAMBA_4_0/source/lib/registry/tests/bindings.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/lib/registry/tests/bindings.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -35,8 +35,13 @@
 class HiveTests(samba.tests.TestCaseInTempDir):
     def setUp(self):
         super(HiveTests, self).setUp()
-        self.hive = registry.open_ldb(os.path.join(self.tempdir, "ldb_new.ldb"))
+        self.hive_path = os.path.join(self.tempdir, "ldb_new.ldb")
+        self.hive = registry.open_ldb(self.hive_path)
 
+    def tearDown(self):
+        del self.hive
+        os.unlink(self.hive_path)
+
     def test_ldb_new(self):
         self.assertTrue(self.hive is not None)
 

Modified: branches/SAMBA_4_0/source/param/param.i
===================================================================
--- branches/SAMBA_4_0/source/param/param.i	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/param/param.i	2007-12-25 16:36:44 UTC (rev 26596)
@@ -59,6 +59,8 @@
         bool is_myname(const char *name) { return lp_is_myname($self, name); }
         int use(struct param_context *param_ctx) { return param_use($self, param_ctx); }
         bool set(const char *parm_name, const char *parm_value) {
+            if (parm_value == NULL)
+                return false;
             return lp_set_cmdline($self, parm_name, parm_value);
         }
 

Modified: branches/SAMBA_4_0/source/param/param_wrap.c
===================================================================
--- branches/SAMBA_4_0/source/param/param_wrap.c	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/param/param_wrap.c	2007-12-25 16:36:44 UTC (rev 26596)
@@ -2643,6 +2643,8 @@
 SWIGINTERN bool loadparm_context_is_myname(loadparm_context *self,char const *name){ return lp_is_myname(self, name); }
 SWIGINTERN int loadparm_context_use(loadparm_context *self,struct param_context *param_ctx){ return param_use(self, param_ctx); }
 SWIGINTERN bool loadparm_context_set(loadparm_context *self,char const *parm_name,char const *parm_value){
+            if (parm_value == NULL)
+                return false;
             return lp_set_cmdline(self, parm_name, parm_value);
         }
 SWIGINTERN PyObject *loadparm_context_get(loadparm_context *self,char const *param_name,char const *service_name){

Modified: branches/SAMBA_4_0/source/scripting/python/samba/__init__.py
===================================================================
--- branches/SAMBA_4_0/source/scripting/python/samba/__init__.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/scripting/python/samba/__init__.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -164,9 +164,9 @@
             self.add(msg)
 
     def modify_ldif(self, ldif):
-        for (changetype, msg) in ldb.parse_ldif(data):
-            assert changetype == CHANGETYPE_MODIFY
-            ldb.modify(msg)
+        for (changetype, msg) in self.parse_ldif(ldif):
+            assert changetype == ldb.CHANGETYPE_MODIFY
+            self.modify(msg)
 
 
 def substitute_var(text, values):

Modified: branches/SAMBA_4_0/source/scripting/python/samba/provision.py
===================================================================
--- branches/SAMBA_4_0/source/scripting/python/samba/provision.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/scripting/python/samba/provision.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -95,7 +95,7 @@
 
     assert "${" not in data
 
-    ldb.load_ldif_add(data)
+    ldb.add_ldif(data)
 
 
 def setup_modify_ldif(ldb, ldif_path, substvars=None):
@@ -140,7 +140,7 @@
     open(f, 'w').write(data)
 
 
-def provision_default_paths(lp, dnsdomain):
+def provision_paths_from_lp(lp, dnsdomain):
     """Set the default paths for provisioning.
 
     :param lp: Loadparm context.
@@ -605,7 +605,7 @@
         realm = lp.get("realm")
     else:
         if lp.get("realm").upper() != realm.upper():
-            raise Error("realm '%s' in smb.conf must match chosen realm '%s'\n" %
+            raise Exception("realm '%s' in smb.conf must match chosen realm '%s'\n" %
                 (lp.get("realm"), realm))
 
     assert realm is not None

Modified: branches/SAMBA_4_0/source/scripting/python/samba/tests/__init__.py
===================================================================
--- branches/SAMBA_4_0/source/scripting/python/samba/tests/__init__.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/scripting/python/samba/tests/__init__.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -67,7 +67,12 @@
 
 class LdbExtensionTests(TestCaseInTempDir):
     def test_searchone(self):
-        l = samba.Ldb(self.tempdir + "/searchone.ldb")
-        l.add({"dn": "foo=dc", "bar": "bla"})
-        self.assertEquals("bla", l.searchone(ldb.Dn(l, "foo=dc"), "bar"))
+        path = self.tempdir + "/searchone.ldb"
+        l = samba.Ldb(path)
+        try:
+            l.add({"dn": "foo=dc", "bar": "bla"})
+            self.assertEquals("bla", l.searchone(ldb.Dn(l, "foo=dc"), "bar"))
+        finally:
+            del l
+            os.unlink(path)
 

Modified: branches/SAMBA_4_0/source/scripting/python/samba/tests/provision.py
===================================================================
--- branches/SAMBA_4_0/source/scripting/python/samba/tests/provision.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/scripting/python/samba/tests/provision.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -29,10 +29,14 @@
 
 class ProvisionTestCase(samba.tests.TestCaseInTempDir):
     def test_setup_secretsdb(self):
-        ldb = setup_secretsdb(os.path.join(self.tempdir, "secrets.ldb"), 
-                              setup_path, None, None, None)
-        self.assertEquals("LSA Secrets",
+        path = os.path.join(self.tempdir, "secrets.ldb")
+        ldb = setup_secretsdb(path, setup_path, None, None, None)
+        try:
+            self.assertEquals("LSA Secrets",
                  ldb.searchone(Dn(ldb, "CN=LSA Secrets"), "CN"))
+        finally:
+            del ldb
+            os.unlink(path)
 
 
 class Disabled:

Modified: branches/SAMBA_4_0/source/scripting/python/samba/upgrade.py
===================================================================
--- branches/SAMBA_4_0/source/scripting/python/samba/upgrade.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/scripting/python/samba/upgrade.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -8,7 +8,6 @@
 """Support code for upgrading from Samba 3 to Samba 4."""
 
 from provision import findnss, provision
-import provision
 import grp
 import pwd
 import uuid
@@ -255,7 +254,7 @@
 
     return ldif
 
-def upgrade_provision(samba3, setup_dir, message, credentials, session_info, paths):
+def upgrade_provision(samba3, setup_dir, message, credentials, session_info, lp, paths):
     oldconf = samba3.get_conf()
 
     if oldconf.get("domain logons") == "True":
@@ -266,7 +265,11 @@
         else:
             serverrole = "member server"
 
+    lp.set("server role", serverrole)
     domainname = oldconf.get("workgroup")
+    if domainname:
+        domainname = str(domainname)
+    lp.set("workgroup", domainname)
     realm = oldconf.get("realm")
     netbiosname = oldconf.get("netbios name")
 
@@ -279,18 +282,19 @@
     if realm is None:
         realm = domainname.lower()
         message("No realm specified in smb.conf file, assuming '%s'\n" % realm)
+    lp.set("realm", realm)
 
     domainguid = secrets_db.get_domain_guid(domainname)
-    domainsid = secrets_db.get_sid(domainsid)
+    domainsid = secrets_db.get_sid(domainname)
     if domainsid is None:
         message("Can't find domain secrets for '%s'; using random SID\n" % domainname)
     
     if netbiosname is not None:
         machinepass = secrets_db.get_machine_password(netbiosname)
     else:
-        netbiosname = None
+        machinepass = None
     
-    provision(lp, setup_dir, message, blank=True, paths=path, session_info=session_info, 
+    provision(lp=lp, setup_dir=setup_dir, message=message, blank=True, ldapbackend=None, paths=paths, session_info=session_info, 
               credentials=credentials, realm=realm, domain=domainname, 
               domainsid=domainsid, domainguid=domainguid, machinepass=machinepass, serverrole=serverrole)
 
@@ -500,19 +504,7 @@
 
     return ret
 
-def upgrade_verify(subobj, samba3, paths, message):
-    message("Verifying account policies")
 
-    samldb = Ldb(paths.samdb)
-
-    for account in samba3.samaccounts:
-        msg = samldb.search("(&(sAMAccountName=" + account.nt_username + ")(objectclass=user))")
-        assert(len(msg) >= 1)
-    
-    # FIXME
-
-
-
 def enable_samba3sam(samdb):
     samdb.modify("""
 dn: @MODULES

Modified: branches/SAMBA_4_0/source/selftest/samba4_tests.sh
===================================================================
--- branches/SAMBA_4_0/source/selftest/samba4_tests.sh	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/selftest/samba4_tests.sh	2007-12-25 16:36:44 UTC (rev 26596)
@@ -297,7 +297,11 @@
 	plantest "samba3.python" none PYTHONPATH=bin/python:scripting/python $PYTHON scripting/bin/subunitrun samba.tests.samba3
 	plantest "samba3sam.python" none PYTHONPATH=bin/python:scripting/python $PYTHON dsdb/samdb/ldb_modules/tests/samba3sam.py `pwd` $DATADIR/samba3/
 	plantest "ldap.python" dc $PYTHON $samba4srcdir/lib/ldb/tests/python/ldap.py \$SERVER -U\$USERNAME%\$PASSWORD
+	plantest "blackbox.samba3dump" none $PYTHON scripting/bin/samba3dump $samba4srcdir/../testdata/samba3
 	rm -rf $PREFIX/upgrade
 	mkdir -p $PREFIX/upgrade
-	plantest "blackbox.upgrade" none $PYTHON setup/upgrade.py $CONFIGURATION --verify --targetdir=$PREFIX ../testdata/samba3 ../testdata/samba3/smb.conf
+	plantest "blackbox.upgrade" none $PYTHON setup/upgrade.py $CONFIGURATION --targetdir=$PREFIX ../testdata/samba3 ../testdata/samba3/smb.conf
+	rm -rf $PREFIX/provision
+	mkdir -p $PREFIX/provision
+	plantest "blackbox.provision.py" none $PYTHON ./setup/provision.py $CONFIGURATION --domain=FOO --realm=foo --targetdir=$PREFIX/provision
 fi

Modified: branches/SAMBA_4_0/source/setup/provision.py
===================================================================
--- branches/SAMBA_4_0/source/setup/provision.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/setup/provision.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -21,7 +21,7 @@
 
 import getopt
 import optparse
-import sys
+import os, sys
 
 # Add path to the library for in-tree use
 sys.path.append("scripting/python")
@@ -32,7 +32,7 @@
 import samba.getopt as options
 import param
 from samba.provision import (provision,  
-                             provision_default_paths, provision_ldapbase)
+                             provision_paths_from_lp, provision_ldapbase)
 
 parser = optparse.OptionParser("provision [options]")
 parser.add_option_group(options.SambaOptions(parser))
@@ -93,6 +93,8 @@
 		help="Set server role to provision for (default standalone)")
 parser.add_option("--partitions-only", 
 		help="Configure Samba's partitions, but do not modify them (ie, join a BDC)", action="store_true")
+parser.add_option("--targetdir", type="string", metavar="DIR", 
+		          help="Set target directory")
 
 opts = parser.parse_args()[0]
 
@@ -101,29 +103,29 @@
 	if not opts.quiet:
 		print text
 
-hostname = opts.host_name
-
-if opts.realm is None or opts.domain is None or opts.host_name is None:
+if opts.realm is None or opts.domain is None:
 	if opts.realm is None:
 		print >>sys.stderr, "No realm set"
 	if opts.domain is None:
 		print >>sys.stderr, "No domain set"
-	if opts.host_name is None:
-		print >>sys.stderr, "No host name set"
 	parser.print_usage()
 	sys.exit(1)
 
 # cope with an initially blank smb.conf 
 lp = param.LoadParm()
-lp.load(opts.configfile)
+if opts.configfile:
+    lp.load(opts.configfile)
+if opts.targetdir is not None:
+    lp.set("private dir", os.path.abspath(opts.targetdir))
+    lp.set("lock dir", os.path.abspath(opts.targetdir))
 lp.set("realm", opts.realm)
 lp.set("workgroup", opts.domain)
-lp.set("server role", opts.server_role)
+lp.set("server role", opts.server_role or "domain controller")
 
 if opts.aci is not None:
 	print "set ACI: %s" % opts.aci
 
-paths = provision_default_paths(lp, opts.realm.lower())
+paths = provision_paths_from_lp(lp, opts.realm.lower())
 paths.smbconf = opts.configfile
 
 if opts.ldap_backend:

Modified: branches/SAMBA_4_0/source/setup/upgrade.py
===================================================================
--- branches/SAMBA_4_0/source/setup/upgrade.py	2007-12-25 16:36:39 UTC (rev 26595)
+++ branches/SAMBA_4_0/source/setup/upgrade.py	2007-12-25 16:36:44 UTC (rev 26596)
@@ -11,7 +11,7 @@
 import param
 import samba
 import samba.getopt as options
-from samba.provision import provision_default_paths
+from auth import system_session
 
 parser = optparse.OptionParser("upgrade [options] <libdir> <smbconf>")
 parser.add_option_group(options.SambaOptions(parser))
@@ -22,7 +22,6 @@
 		help="directory with setup files")
 parser.add_option("--realm", type="string", metavar="REALM", help="set realm")
 parser.add_option("--quiet", help="Be quiet")
-parser.add_option("--verify", help="Verify resulting configuration")
 parser.add_option("--blank", 
 		help="do not add users or groups, just the structure")
 parser.add_option("--targetdir", type="string", metavar="DIR", 
@@ -51,6 +50,7 @@
 samba3 = Samba3(libdir, smbconf)
 
 from samba.upgrade import upgrade_provision
+from samba.provision import provision_paths_from_lp
 
 message("Provisioning\n")
 
@@ -60,9 +60,12 @@
 
 creds = credopts.get_credentials()
 lp = param.LoadParm()
-lp.load(opts.configfile)
-upgrade_provision(samba3, setup_dir, message, credentials=creds, session_info=system_session())
-
-if opts.verify:
-	message("Verifying...\n")
-	ret = upgrade_verify(subobj, samba3, paths, message)
+if opts.configfile:
+    lp.load(opts.configfile)
+if opts.targetdir is not None:
+    lp.set("private dir", os.path.abspath(opts.targetdir))
+    lp.set("lock dir", os.path.abspath(opts.targetdir))
+paths = provision_paths_from_lp(lp, "")
+paths.smbconf = opts.configfile
+upgrade_provision(samba3, setup_dir, message, credentials=creds, session_info=system_session(), 
+                  lp=lp, paths=paths)



More information about the samba-cvs mailing list