summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorGarming Sam <garming@catalyst.net.nz>2018-03-12 14:45:48 +1300
committerDouglas Bagnall <dbagnall@samba.org>2018-03-21 04:36:22 +0100
commit2b87bf8c0984df65f7d0396f40442432c8b57c4b (patch)
treea08a96a0162dacdcbb773e2a00bc60c64206c9df /source4
parent79b640f84e32ccd548d78e427b1cbdad1df21669 (diff)
downloadsamba-2b87bf8c0984df65f7d0396f40442432c8b57c4b.tar.gz
samba_dnsupdate: Introduce automatic site coverage
This uses the underlying function in kcc_utils.py which already has tests. Signed-off-by: Garming Sam <garming@catalyst.net.nz> Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Diffstat (limited to 'source4')
-rwxr-xr-xsource4/scripting/bin/samba_dnsupdate27
1 files changed, 27 insertions, 0 deletions
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: