[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha2-1229-g0923de1

Andrew Bartlett abartlet at samba.org
Fri Mar 7 00:11:28 GMT 2008


The branch, v4-0-test has been updated
       via  0923de12282b0e063dd73bc3e056dd5c3663c190 (commit)
       via  2211476bbb3d8e5bca9659e886e559a36f40aff4 (commit)
       via  a6997c333cdd68dfba8a069df448836ff487787f (commit)
       via  e462a107d3bafcc546ca4d53dcc8eb32e4280745 (commit)
      from  0c1ccbc183c1d2967da2d9a17033f3b116ff7387 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit 0923de12282b0e063dd73bc3e056dd5c3663c190
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Mar 7 10:57:52 2008 +1100

    Rework provision scripts for more testing
    
    This fixes up some issues with testdir (was not honoured) and
    increases test coverage.
    
    We now check all the major provision modes.  In doing so, to make it
    possible to call from the multiple layers of 'sh', I have allowed 'dc'
    to alias 'domain controller' and 'member' to alias 'member server'.
    Fighting shell quoting in the test system was just too hard...
    
    Also fix upgrade.py
    
    Andrew Bartlett

commit 2211476bbb3d8e5bca9659e886e559a36f40aff4
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Mar 7 09:05:24 2008 +1100

    Fixup the NET-API-USERMOD test.
    
    This test needed to be updated to handle the fact that you cannot
    clear the ACB_PW_EXPIRED bit, and to always use the torture comment
    functions (not printf directly).
    
    Andrew Bartlett

commit a6997c333cdd68dfba8a069df448836ff487787f
Merge: e462a107d3bafcc546ca4d53dcc8eb32e4280745 0c1ccbc183c1d2967da2d9a17033f3b116ff7387
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Mar 7 07:38:44 2008 +1100

    Merge branch 'v4-0-test' of git://git.samba.org/samba into 4-0-local

commit e462a107d3bafcc546ca4d53dcc8eb32e4280745
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Mar 7 07:33:14 2008 +1100

    Start to rework provision for LDAP backends
    
    This is the start of the rework of the provision script to handle an
    LDAP backend correctly.  For example, we must not set the 'tdb
    modules' against an LDAP backend such as OpenLDAP that handles subtree
    renames.
    
    Andrew Bartlett

-----------------------------------------------------------------------

Summary of changes:
 source/param/loadparm.c                    |    2 +
 source/scripting/python/samba/__init__.py  |    7 ++++-
 source/scripting/python/samba/provision.py |   40 ++++++++++++++++++----------
 source/scripting/python/samba/upgrade.py   |    5 +---
 source/setup/provision                     |   20 ++++++++-----
 source/setup/provision.smb.conf.dc         |    4 +-
 source/setup/provision.smb.conf.member     |    4 +-
 source/setup/provision.smb.conf.standalone |    4 +-
 source/setup/tests/blackbox_provision.sh   |    5 +++-
 source/torture/libnet/libnet_user.c        |    4 +-
 source/torture/libnet/userman.c            |    6 ++--
 11 files changed, 62 insertions(+), 39 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index 65ce759..a1d29b0 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -316,7 +316,9 @@ static const struct enum_list enum_smb_signing_vals[] = {
 static const struct enum_list enum_server_role[] = {
 	{ROLE_STANDALONE, "standalone"},
 	{ROLE_DOMAIN_MEMBER, "member server"},
+	{ROLE_DOMAIN_MEMBER, "member"},
 	{ROLE_DOMAIN_CONTROLLER, "domain controller"},
+	{ROLE_DOMAIN_CONTROLLER, "dc"},
 	{-1, NULL}
 };
 
diff --git a/source/scripting/python/samba/__init__.py b/source/scripting/python/samba/__init__.py
index 8d5f425..e91b320 100644
--- a/source/scripting/python/samba/__init__.py
+++ b/source/scripting/python/samba/__init__.py
@@ -147,7 +147,12 @@ class Ldb(ldb.Ldb):
             k = 0
             while ++k < 10 and (previous_remaining != current_remaining):
                 # and the rest
-                res2 = self.search(basedn, ldb.SCOPE_SUBTREE, "(|(objectclass=*)(distinguishedName=*))", ["distinguishedName"])
+                try:
+                    res2 = self.search(basedn, ldb.SCOPE_SUBTREE, "(|(objectclass=*)(distinguishedName=*))", ["distinguishedName"])
+                except ldb.LdbError, (LDB_ERR_NO_SUCH_OBJECT, _):
+                    # Ignore missing dn errors
+                    return
+
                 previous_remaining = current_remaining
                 current_remaining = len(res2)
                 for msg in res2:
diff --git a/source/scripting/python/samba/provision.py b/source/scripting/python/samba/provision.py
index ab8c515..25c1a99 100644
--- a/source/scripting/python/samba/provision.py
+++ b/source/scripting/python/samba/provision.py
@@ -343,12 +343,21 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
     	
     if ldap_backend_type == "fedora-ds":
         backend_modules = ["nsuniqueid", "paged_searches"]
+        # We can handle linked attributes here, as we don't have directory-side subtree operations
+        tdb_modules_list = ["linked_attributes"]
     elif ldap_backend_type == "openldap":
         backend_modules = ["normalise", "entryuuid", "paged_searches"]
+        # OpenLDAP handles subtree renames, so we don't want to do any of these things
+        tdb_modules_list = None
     elif serverrole == "domain controller":
         backend_modules = ["repl_meta_data"]
     else:
         backend_modules = ["objectguid"]
+
+    if tdb_modules_list is None:
+        tdb_modules_list_as_string = ""
+    else:
+        tdb_modules_list_as_string = ","+",".join(tdb_modules_list)
         
     samdb.transaction_start()
     try:
@@ -364,7 +373,7 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
                 "CONFIGDN_MOD": "naming_fsmo,instancetype",
                 "DOMAINDN_MOD": "pdc_fsmo,password_hash,instancetype",
                 "MODULES_LIST": ",".join(modules_list),
-                "TDB_MODULES_LIST": ","+",".join(tdb_modules_list),
+                "TDB_MODULES_LIST": tdb_modules_list_as_string,
                 "MODULES_LIST2": ",".join(modules_list2),
                 "BACKEND_MOD": ",".join(backend_modules),
         })
@@ -563,9 +572,7 @@ def setup_samdb(path, setup_path, session_info, credentials, lp,
     :note: This will wipe the main SAM database file!
     """
 
-    assert serverrole in ("domain controller", "member server")
-
-    erase = (fill != FILL_DRS)    
+    erase = (fill != FILL_DRS)
 
     # Also wipes the database
     setup_samdb_partitions(path, setup_path, schemadn=schemadn, configdn=configdn, 
@@ -787,17 +794,22 @@ def provision(setup_dir, message, session_info,
         if not os.path.exists(os.path.join(targetdir, "etc")):
            os.mkdir(os.path.join(targetdir, "etc"))
 
-        if smbconf is None:
-            smbconf = os.path.join(targetdir, os.path.join("etc", "smb.conf"))
+        smbconf = os.path.join(targetdir, os.path.join("etc", "smb.conf"))
 
     # only install a new smb.conf if there isn't one there already
+
     if not os.path.exists(smbconf):
         message("Setting up smb.conf")
-        assert serverrole is not None
+        if serverrole is None:
+            serverrole = "standalone"
+
+        assert serverrole in ("domain controller", "member server", "standalone")
         if serverrole == "domain controller":
             smbconfsuffix = "dc"
         elif serverrole == "member server":
             smbconfsuffix = "member"
+        elif serverrole == "standalone":
+            smbconfsuffix = "standalone"
 
         assert domain is not None
         assert realm is not None
@@ -818,8 +830,8 @@ def provision(setup_dir, message, session_info,
         setup_file(setup_path("provision.smb.conf.%s" % smbconfsuffix), 
                    smbconf, {
                 "HOSTNAME": hostname,
-                "DOMAIN_CONF": domain,
-                "REALM_CONF": realm,
+                "DOMAIN": domain,
+                "REALM": realm,
                 "SERVERROLE": serverrole,
                 "NETLOGONPATH": netlogon,
                 "SYSVOLPATH": sysvol,
@@ -832,7 +844,7 @@ def provision(setup_dir, message, session_info,
 
     if serverrole is None:
         serverrole = lp.get("server role")
-    assert serverrole in ("domain controller", "member server")
+    assert serverrole in ("domain controller", "member server", "standalone")
     if invocationid is None and serverrole == "domain controller":
         invocationid = uuid.random()
 
@@ -842,6 +854,10 @@ def provision(setup_dir, message, session_info,
     assert realm is not None
     realm = realm.upper()
 
+    if lp.get("realm").upper() != realm.upper():
+        raise Exception("realm '%s' in %s must match chosen realm '%s'" %
+                        (lp.get("realm"), smbconf, realm))
+    
     dnsdomain = realm.lower()
 
     paths = provision_paths_from_lp(lp, dnsdomain)
@@ -887,10 +903,6 @@ def provision(setup_dir, message, session_info,
     message("Provisioning for %s in realm %s" % (domain, realm))
     message("Using administrator password: %s" % adminpass)
 
-    if lp.get("realm").upper() != realm.upper():
-        raise Exception("realm '%s' in smb.conf must match chosen realm '%s'" %
-                        (lp.get("realm"), realm))
-
     # only install a new shares config db if there is none
     if not os.path.exists(paths.shareconf):
         message("Setting up share.ldb")
diff --git a/source/scripting/python/samba/upgrade.py b/source/scripting/python/samba/upgrade.py
index 01b62ff..c508684 100644
--- a/source/scripting/python/samba/upgrade.py
+++ b/source/scripting/python/samba/upgrade.py
@@ -218,11 +218,9 @@ def upgrade_provision(samba3, setup_dir, message, credentials, session_info, lp,
         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")
 
@@ -235,7 +233,6 @@ def upgrade_provision(samba3, setup_dir, message, credentials, session_info, lp,
     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(domainname)
@@ -247,7 +244,7 @@ def upgrade_provision(samba3, setup_dir, message, credentials, session_info, lp,
     else:
         machinepass = None
     
-    domaindn = provision(lp=lp, setup_dir=setup_dir, message=message, 
+    domaindn = provision(setup_dir=setup_dir, message=message, 
                          samdb_fill=FILL_DRS, paths=paths, session_info=session_info, 
                          credentials=credentials, realm=realm, 
                          domain=domainname, domainsid=domainsid, domainguid=domainguid, 
diff --git a/source/setup/provision b/source/setup/provision
index 606443a..629bfa1 100755
--- a/source/setup/provision
+++ b/source/setup/provision
@@ -88,7 +88,7 @@ parser.add_option("--ldap-backend-type", type="choice", metavar="LDAP-BACKEND-TY
 parser.add_option("--aci", type="string", metavar="ACI", 
 		help="An arbitary LDIF fragment, particularly useful to loading a backend ACI value into a target LDAP server. You must provide at least a realm and domain")
 parser.add_option("--server-role", type="choice", metavar="ROLE",
-		          choices=["domain controller", "member server"],
+		  choices=["domain controller", "dc", "member server", "member", "standalone"],
 		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")
@@ -110,14 +110,18 @@ if opts.realm is None or opts.domain is None:
 	parser.print_usage()
 	sys.exit(1)
 
-# cope with an initially blank smb.conf 
-
-if sambaopts.get_loadparm_path() is not None:
-    smbconf = sambaopts.get_loadparm_path()
+smbconf = sambaopts.get_loadparm_path()
 
 if opts.aci is not None:
 	print "set ACI: %s" % opts.aci
 
+if opts.server_role == "dc":
+	server_role = "domain controller"
+elif opts.server_role == "member":
+	server_role = "member server"
+else:
+        server_role = opts.server_role
+
 creds = credopts.get_credentials()
 
 setup_dir = opts.setupdir
@@ -131,8 +135,8 @@ elif opts.partitions_only:
     samdb_fill = FILL_DRS
 
 provision(setup_dir, message, 
-          system_session(), creds, smbconf=smbconf, 
-          samdb_fill=samdb_fill, realm=opts.realm,
+          system_session(), creds, smbconf=smbconf, targetdir=opts.targetdir,
+          samdb_fill=samdb_fill, realm=opts.realm, domain=opts.domain,
           domainguid=opts.domain_guid, domainsid=opts.domain_sid,
           policyguid=opts.policy_guid, hostname=opts.host_name,
           hostip=opts.host_ip, hostguid=opts.host_guid, 
@@ -140,7 +144,7 @@ provision(setup_dir, message,
           krbtgtpass=opts.krbtgtpass, machinepass=opts.machinepass,
           dnspass=opts.dnspass, root=opts.root, nobody=opts.nobody,
           nogroup=opts.nogroup, wheel=opts.wheel, users=opts.users,
-          aci=opts.aci, serverrole=opts.server_role, 
+          aci=opts.aci, serverrole=server_role, 
           ldap_backend=opts.ldap_backend, 
           ldap_backend_type=opts.ldap_backend_type)
 
diff --git a/source/setup/provision.smb.conf.dc b/source/setup/provision.smb.conf.dc
index e77e699..ad06be4 100644
--- a/source/setup/provision.smb.conf.dc
+++ b/source/setup/provision.smb.conf.dc
@@ -1,7 +1,7 @@
 [globals]
 	netbios name	= ${HOSTNAME}
-	workgroup	= ${DOMAIN_CONF}
-	realm		= ${REALM_CONF}
+	workgroup	= ${DOMAIN}
+	realm		= ${REALM}
 	server role     = ${SERVERROLE}
 	${PRIVATEDIR_LINE}
 	${LOCKDIR_LINE}
diff --git a/source/setup/provision.smb.conf.member b/source/setup/provision.smb.conf.member
index 1d9191d..0d742fb 100644
--- a/source/setup/provision.smb.conf.member
+++ b/source/setup/provision.smb.conf.member
@@ -1,7 +1,7 @@
 [globals]
 	netbios name	= ${HOSTNAME}
-	workgroup	= ${DOMAIN_CONF}
-	realm		= ${REALM_CONF}
+	workgroup	= ${DOMAIN}
+	realm		= ${REALM}
 	server role     = ${SERVERROLE}
 	${PRIVATEDIR_LINE}
 	${LOCKDIR_LINE}
diff --git a/source/setup/provision.smb.conf.standalone b/source/setup/provision.smb.conf.standalone
index 1d9191d..0d742fb 100644
--- a/source/setup/provision.smb.conf.standalone
+++ b/source/setup/provision.smb.conf.standalone
@@ -1,7 +1,7 @@
 [globals]
 	netbios name	= ${HOSTNAME}
-	workgroup	= ${DOMAIN_CONF}
-	realm		= ${REALM_CONF}
+	workgroup	= ${DOMAIN}
+	realm		= ${REALM}
 	server role     = ${SERVERROLE}
 	${PRIVATEDIR_LINE}
 	${LOCKDIR_LINE}
diff --git a/source/setup/tests/blackbox_provision.sh b/source/setup/tests/blackbox_provision.sh
index 0aed7bb..83c045e 100755
--- a/source/setup/tests/blackbox_provision.sh
+++ b/source/setup/tests/blackbox_provision.sh
@@ -27,7 +27,10 @@ testit() {
 	return $status
 }
 
-testit "simple" $PYTHON ./setup/provision $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple
+testit "simple-default" $PYTHON ./setup/provision $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple-default
+testit "simple-dc" $PYTHON ./setup/provision $CONFIGURATION --server-role="dc" --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple-dc
+testit "simple-member" $PYTHON ./setup/provision $CONFIGURATION --server-role="member" --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple-member
+testit "simple-standalone" $PYTHON ./setup/provision $CONFIGURATION --server-role="standalone" --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple-standalone
 
 reprovision() {
 	$PYTHON ./setup/provision $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir="$PREFIX/reprovision"
diff --git a/source/torture/libnet/libnet_user.c b/source/torture/libnet/libnet_user.c
index 31300a7..5446087 100644
--- a/source/torture/libnet/libnet_user.c
+++ b/source/torture/libnet/libnet_user.c
@@ -339,9 +339,9 @@ static void set_test_changes(TALLOC_CTX *mem_ctx, struct libnet_ModifyUser *r,
 	const char* logon_scripts[] = { "start_login.cmd", "login.bat", "start.cmd" };
 	const char* home_dirs[] = { "\\\\srv\\home", "\\\\homesrv\\home\\user", "\\\\pdcsrv\\domain" };
 	const char* home_drives[] = { "H:", "z:", "I:", "J:", "n:" };
-	const uint32_t flags[] = { (ACB_DISABLED | ACB_NORMAL),
+	const uint32_t flags[] = { (ACB_DISABLED | ACB_NORMAL | ACB_PW_EXPIRED),
 				   (ACB_NORMAL | ACB_PWNOEXP),
-				   (ACB_NORMAL) };
+				   (ACB_NORMAL | ACB_PW_EXPIRED) };
 	const char *homedir, *homedrive, *logonscript;
 	struct timeval now;
 	int i, testfld;
diff --git a/source/torture/libnet/userman.c b/source/torture/libnet/userman.c
index 5ce0a64..a5d8540 100644
--- a/source/torture/libnet/userman.c
+++ b/source/torture/libnet/userman.c
@@ -88,9 +88,9 @@ static bool test_usermod(struct torture_context *tctx, struct dcerpc_pipe *p,
 	const char* home_dirs[] = { "\\\\srv\\home", "\\\\homesrv\\home\\user", "\\\\pdcsrv\\domain" };
 	const char* home_drives[] = { "H:", "z:", "I:", "J:", "n:" };
 	const char *homedir, *homedrive, *logonscript;
-	const uint32_t flags[] = { (ACB_DISABLED | ACB_NORMAL),
+	const uint32_t flags[] = { (ACB_DISABLED | ACB_NORMAL | ACB_PW_EXPIRED),
 				   (ACB_NORMAL | ACB_PWNOEXP),
-				   (ACB_NORMAL) };
+				   (ACB_NORMAL | ACB_PW_EXPIRED) };
 
 	NTSTATUS status;
 	struct timeval now;
@@ -201,7 +201,7 @@ static bool test_usermod(struct torture_context *tctx, struct dcerpc_pipe *p,
 			break;
 		}
 
-		printf(((i < num_changes - 1) ? "%s," : "%s"), fldname);
+		torture_comment(tctx, ((i < num_changes - 1) ? "%s," : "%s"), fldname);
 	}
 	torture_comment(tctx, "]\n");
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list