mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user