diff options
author | Andrew Bartlett <abartlet@samba.org> | 2012-09-26 09:48:48 +1000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2012-09-26 04:08:26 +0200 |
commit | 6d7c651f2f61b481c1e1ade1e2e0e756ccef2210 (patch) | |
tree | 8d9f57091e36bbb72d4f1add9ad1421debf9feb7 | |
parent | b320e7f93b5905558efa879992c125af66f0043c (diff) | |
download | samba-6d7c651f2f61b481c1e1ade1e2e0e756ccef2210.tar.gz samba-6d7c651f2f61b481c1e1ade1e2e0e756ccef2210.tar.bz2 samba-6d7c651f2f61b481c1e1ade1e2e0e756ccef2210.zip |
samba_dnsupdate: Move to using tmpfile/rename to keep the dns_hosts_file consistent
This may be the cause of some of the large failure modes on the build farm.
Andrew Bartlett
-rw-r--r-- | source3/Makefile.in | 2 | ||||
-rwxr-xr-x | source4/scripting/bin/samba_dnsupdate | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index 2ad8eccdb2..0e72feae79 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -3328,7 +3328,7 @@ test:: all torture timelimit VFSLIBDIR="$(builddir)/bin" \ RUN_FROM_BUILD_FARM="$(RUN_FROM_BUILD_FARM)" \ SUBUNIT_FORMATTER="$(SUBUNIT_FORMATTER)" \ - PERL="$(PERL)" PYTHON="$(PYTHON)" \ + PERL="$(PERL)" PYTHON="$(PYTHON)" PYTHONPATH="$(srcdir)/../bin/python" \ $(srcdir)/selftest/s3-selftest.sh test-%: diff --git a/source4/scripting/bin/samba_dnsupdate b/source4/scripting/bin/samba_dnsupdate index d21496ca21..ab87356484 100755 --- a/source4/scripting/bin/samba_dnsupdate +++ b/source4/scripting/bin/samba_dnsupdate @@ -278,10 +278,17 @@ def call_nsupdate(d): print "Calling nsupdate for %s" % d if opts.use_file is not None: - wfile = open(opts.use_file, 'a') - fcntl.lockf(wfile, fcntl.LOCK_EX) + rfile = open(opts.use_file, 'r+') + fcntl.lockf(rfile, fcntl.LOCK_EX) + (file_dir, file_name) = os.path.split(opts.use_file) + (tmp_fd, tmpfile) = tempfile.mkstemp(dir=file_dir, prefix=file_name, suffix="XXXXXX") + wfile = os.fdopen(tmp_fd, 'a') + rfile.seek(0) + for line in rfile: + wfile.write(line) wfile.write(str(d)+"\n") - fcntl.lockf(wfile, fcntl.LOCK_UN) + os.rename(tmpfile, opts.use_file) + fcntl.lockf(rfile, fcntl.LOCK_UN) return normalised_name = d.name.rstrip('.') + '.' |