Skip to content

Commit

Permalink
samba_dnsupdate: Introduce automatic site coverage
Browse files Browse the repository at this point in the history
This uses the underlying function in kcc_utils.py which already has
tests.

Signed-off-by: Garming Sam <[email protected]>
Reviewed-by: Douglas Bagnall <[email protected]>
  • Loading branch information
GSam authored and douglasbagnall committed Mar 21, 2018
1 parent 79b640f commit 2b87bf8
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
1 change: 0 additions & 1 deletion selftest/knownfail.d/autosite_coverage

This file was deleted.

27 changes: 27 additions & 0 deletions source4/scripting/bin/samba_dnsupdate
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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:
Expand Down

0 comments on commit 2b87bf8

Please sign in to comment.