From: Tim Beale Date: Mon, 25 Jun 2018 02:00:59 +0000 (+1200) Subject: provision: set 'binddns dir' when making new smb.conf X-Git-Tag: tevent-0.9.37~209 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8b07ddde47432cb4637325c6606f46922b8fe3da;p=thirdparty%2Fsamba.git provision: set 'binddns dir' when making new smb.conf When creating a new smb.conf from scratch during a join/clone/etc, the 'binddns dir' setting still uses the source smb.conf/default setting, instead of the targetdir sub-directory. I noticed this problem when trying to create a new testenv - the provision() was trying to create /usr/local/samba/bind-dns directory, which would fail if samba hadn't already been installed on the host machine. Now that this is fixed, we also need to fix tests that were explicitly asserting that no unexpected directories were left behind after the test completes. This change also breaks the upgradeprovision script. The upgrade- provision calls newprovision() to create a reference provision in a temporary directory. However, previously this temporary provision was creating the bind-dns directory in the actual upgrade directory as a side-effect, e.g. it did a provision() with targetdir=alpha13_upgrade_full/private/referenceprovisionLBKBh2 and this ended up creating alpha13_upgrade_full/bind-dns as a side-effect. The provision() now creates bind-dns in the specified targetdir, but this means check_for_DNS() fails (it tries to create bind-dns sub- directories, but the upgrade's bind-dns doesn't exist). I've avoided this problem by making sure bind-dns exists as part of the check_for_DNS() processing. Signed-off-by: Tim Beale Reviewed-by: Douglas Bagnall Reviewed-by: Andrew Bartlett Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Thu Jun 28 06:22:16 CEST 2018 on sn-devel-144 --- diff --git a/python/samba/provision/__init__.py b/python/samba/provision/__init__.py index 36f50f252ed..e5718949626 100644 --- a/python/samba/provision/__init__.py +++ b/python/samba/provision/__init__.py @@ -744,10 +744,12 @@ def make_smbconf(smbconf, hostname, domain, realm, targetdir, global_settings["lock dir"] = os.path.abspath(targetdir) global_settings["state directory"] = os.path.abspath(os.path.join(targetdir, "state")) global_settings["cache directory"] = os.path.abspath(os.path.join(targetdir, "cache")) + global_settings["binddns dir"] = os.path.abspath(os.path.join(targetdir, "bind-dns")) lp.set("lock dir", os.path.abspath(targetdir)) lp.set("state directory", global_settings["state directory"]) lp.set("cache directory", global_settings["cache directory"]) + lp.set("binddns dir", global_settings["binddns dir"]) if eadb: if use_ntvfs and not lp.get("posix:eadb"): diff --git a/python/samba/tests/join.py b/python/samba/tests/join.py index 1f9fab1d72a..17de3ab84ce 100644 --- a/python/samba/tests/join.py +++ b/python/samba/tests/join.py @@ -73,6 +73,7 @@ class JoinTestCase(DNSTKeyTest): shutil.rmtree(os.path.join(self.tempdir, "etc")) shutil.rmtree(os.path.join(self.tempdir, "msg.lock")) os.unlink(os.path.join(self.tempdir, "names.tdb")) + shutil.rmtree(os.path.join(self.tempdir, "bind-dns")) self.join_ctx.cleanup_old_join(force=True) diff --git a/python/samba/tests/samdb.py b/python/samba/tests/samdb.py index d4279b4aed4..8c477b291db 100644 --- a/python/samba/tests/samdb.py +++ b/python/samba/tests/samdb.py @@ -59,7 +59,7 @@ class SamDBTestCase(TestCaseInTempDir): for f in ['names.tdb']: os.remove(os.path.join(self.tempdir, f)) - for d in ['etc', 'msg.lock', 'private', 'state']: + for d in ['etc', 'msg.lock', 'private', 'state', 'bind-dns']: shutil.rmtree(os.path.join(self.tempdir, d)) super(SamDBTestCase, self).tearDown() diff --git a/source4/scripting/bin/samba_upgradeprovision b/source4/scripting/bin/samba_upgradeprovision index 9d3e73604a2..5d040d21d66 100755 --- a/source4/scripting/bin/samba_upgradeprovision +++ b/source4/scripting/bin/samba_upgradeprovision @@ -226,6 +226,9 @@ def check_for_DNS(refprivate, private, refbinddns_dir, binddns_dir, dns_backend) if not os.path.exists(dnsfile): shutil.copy("%s/dns_update_list" % refprivate, "%s" % dnsfile) + if not os.path.exists(binddns_dir): + os.mkdir(binddns_dir) + if dns_backend not in ['BIND9_DLZ', 'BIND9_FLATFILE']: return diff --git a/source4/torture/drs/python/samba_tool_drs.py b/source4/torture/drs/python/samba_tool_drs.py index 502c8096603..29c6016471c 100644 --- a/source4/torture/drs/python/samba_tool_drs.py +++ b/source4/torture/drs/python/samba_tool_drs.py @@ -47,6 +47,7 @@ class SambaToolDrsTests(drs_base.DrsBaseTestCase): shutil.rmtree(os.path.join(self.tempdir, "msg.lock")) os.remove(os.path.join(self.tempdir, "names.tdb")) shutil.rmtree(os.path.join(self.tempdir, "state")) + shutil.rmtree(os.path.join(self.tempdir, "bind-dns")) except Exception: pass