1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

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>
This commit is contained in:
Garming Sam 2018-03-12 14:45:48 +13:00 committed by Douglas Bagnall
parent 79b640f84e
commit 2b87bf8c09
2 changed files with 27 additions and 1 deletions

View File

@ -1 +0,0 @@
^samba.tests.blackbox.samba_dnsupdate.samba.tests.blackbox.samba_dnsupdate.SambaDnsUpdateTests.test_add_new_uncovered_site

View File

@ -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: