From 3ec5ba501ebe5a9579cbf4c78a6f4ee157f839ed Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 15 Oct 2016 19:17:44 +0200 Subject: [PATCH] unbound-dhcp-bridge: Only update cache when lease was added/removed Signed-off-by: Michael Tremer --- config/unbound/unbound-dhcp-leases-bridge | 36 ++++++++++++++++------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/config/unbound/unbound-dhcp-leases-bridge b/config/unbound/unbound-dhcp-leases-bridge index a41354349d..4804dba2a1 100644 --- a/config/unbound/unbound-dhcp-leases-bridge +++ b/config/unbound/unbound-dhcp-leases-bridge @@ -486,23 +486,37 @@ class UnboundConfigWriter(object): if not new_leases and not removed_leases: return - # Update cache - self._cached_leases = leases - # Write out all leases self.write_dhcp_leases(leases) # Update unbound about changes for l in removed_leases: - for name, ttl, type, content in l.rrset: - log.debug("Removing records for %s" % name) - self._control("local_data_remove", name) + try: + for name, ttl, type, content in l.rrset: + log.debug("Removing records for %s" % name) + self._control("local_data_remove", name) + + # If the lease cannot be removed we will try the next one + except: + continue + + # If the removal was successful, we will remove it from the cache + else: + self._cached_leases.remove(l) for l in new_leases: - for rr in l.rrset: - log.debug("Adding new record %s" % " ".join(rr)) - self._control("local_data", *rr) + try: + for rr in l.rrset: + log.debug("Adding new record %s" % " ".join(rr)) + self._control("local_data", *rr) + # If the lease cannot be added we will try the next one + except: + continue + + # Add lease to cache when successfully added + else: + self._cached_leases.append(l) def write_dhcp_leases(self, leases): with open(self.path, "w") as f: @@ -515,13 +529,15 @@ class UnboundConfigWriter(object): command.extend(args) try: - return subprocess.check_output(command) + subprocess.check_output(command) # Log any errors except subprocess.CalledProcessError as e: log.critical("Could not run %s, error code: %s: %s" % ( " ".join(command), e.returncode, e.output)) + raise + if __name__ == "__main__": parser = argparse.ArgumentParser(description="Bridge for DHCP Leases and Unbound DNS") -- 2.39.2