From: Garming Sam Date: Mon, 12 Mar 2018 01:45:48 +0000 (+1300) Subject: samba_dnsupdate: Introduce automatic site coverage X-Git-Tag: talloc-2.1.12~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2b87bf8c0984df65f7d0396f40442432c8b57c4b;p=thirdparty%2Fsamba.git samba_dnsupdate: Introduce automatic site coverage This uses the underlying function in kcc_utils.py which already has tests. Signed-off-by: Garming Sam Reviewed-by: Douglas Bagnall --- diff --git a/selftest/knownfail.d/autosite_coverage b/selftest/knownfail.d/autosite_coverage deleted file mode 100644 index 1dd2df45cc7..00000000000 --- a/selftest/knownfail.d/autosite_coverage +++ /dev/null @@ -1 +0,0 @@ -^samba.tests.blackbox.samba_dnsupdate.samba.tests.blackbox.samba_dnsupdate.SambaDnsUpdateTests.test_add_new_uncovered_site diff --git a/source4/scripting/bin/samba_dnsupdate b/source4/scripting/bin/samba_dnsupdate index ac6cf616b8f..d6f77d4cabb 100755 --- a/source4/scripting/bin/samba_dnsupdate +++ b/source4/scripting/bin/samba_dnsupdate @@ -24,6 +24,7 @@ import fcntl import sys import tempfile import subprocess +from samba.kcc import kcc_utils # ensure we get messages out immediately, so they get in the samba logs, # and don't get swallowed by a timeout @@ -48,6 +49,7 @@ from samba.samdb import SamDB from samba.dcerpc import netlogon, winbind from samba.netcmd.dns import cmd_dns from samba import gensec +import ldb samba.ensure_third_party_module("dns", "dnspython") import dns.resolver @@ -775,9 +777,15 @@ for line in cfile: cache_list.append(c) cache_set.add(str(c)) +site_specific_rec = [] + # read each line, and check that the DNS name exists for line in file: line = line.strip() + + if '${SITE}' in line: + site_specific_rec.append(line) + if line == '' or line[0] == "#": continue d = parse_dns_line(line, sub_vars) @@ -791,6 +799,25 @@ for line in file: dns_list.append(d) dup_set.add(str(d)) +# Perform automatic site coverage by default +auto_coverage = True + +if not am_rodc and auto_coverage: + site_names = kcc_utils.uncovered_sites_to_cover(samdb, + samdb.server_site_name()) + + # Duplicate all site specific records for the uncovered site + for site in site_names: + to_add = [samba.substitute_var(line, {'SITE': site}) + for line in site_specific_rec] + + for site_line in to_add: + d = parse_dns_line(site_line, + sub_vars=sub_vars) + if d is not None and str(d) not in dup_set: + dns_list.append(d) + dup_set.add(str(d)) + # now expand the entries, if any are A record with ip set to $IP # then replace with multiple entries, one for each interface IP for d in dns_list: