unbound-dhcp-leases-bridge: Replace leases file atomically

When there is a large number of leases, writing the file may
take a long time. When unbound is re-reading its configuration
in that time, the file might syntactically incorrect.

This change writes the file first and then moves it
to the right place in one transaction.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Michael Tremer
2019-03-28 12:51:06 +00:00
parent 35cdc506b0
commit b666975ec2
2 changed files with 8 additions and 1 deletions

View File

@@ -18,6 +18,7 @@ usr/local/bin/ipsec-interfaces
usr/local/bin/suricatactrl
usr/local/bin/update-ids-ruleset
usr/sbin/convert-snort
usr/sbin/unbound-dhcp-leases-bridge
var/ipfire/backup/bin/backup.pl
var/ipfire/backup/include
var/ipfire/general-functions.pl

View File

@@ -25,9 +25,11 @@ import daemon
import ipaddress
import logging
import logging.handlers
import os
import re
import signal
import subprocess
import tempfile
import inotify.adapters
@@ -519,11 +521,15 @@ class UnboundConfigWriter(object):
self._cached_leases.append(l)
def write_dhcp_leases(self, leases):
with open(self.path, "w") as f:
with tempfile.NamedTemporaryFile(mode="w", delete=False) as f:
filename = f.name
for l in leases:
for rr in l.rrset:
f.write("local-data: \"%s\"\n" % " ".join(rr))
os.rename(filename, self.path)
def _control(self, *args):
command = ["unbound-control"]
command.extend(args)