From fe275467e8f6bed1f5b688776f54a4f6a3922c49 Mon Sep 17 00:00:00 2001 From: AliveDevil Date: Sat, 6 Jan 2024 23:57:15 +0100 Subject: [PATCH] Add Opt-Out of unique hostname enforcing --- src/pdns-dhcp/Dns/DnsRepository.cs | 19 ++++++++++++++----- src/pdns-dhcp/Options/PowerDnsOptions.cs | 4 +++- src/pdns-dhcp/appsettings.json | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/pdns-dhcp/Dns/DnsRepository.cs b/src/pdns-dhcp/Dns/DnsRepository.cs index 6044460..ea4dba1 100644 --- a/src/pdns-dhcp/Dns/DnsRepository.cs +++ b/src/pdns-dhcp/Dns/DnsRepository.cs @@ -2,6 +2,10 @@ using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; +using Microsoft.Extensions.Options; + +using pdns_dhcp.Options; + using Timeout = System.Threading.Timeout; namespace pdns_dhcp.Dns; @@ -10,10 +14,16 @@ public class DnsRepository { private static ReadOnlySpan Lifetimes => [600, 3600]; + private readonly PowerDnsOptions _options; private readonly ReaderWriterLockSlim _recordLock = new(); private readonly List _records = []; private readonly SemaphoreSlim _syncLock = new(1, 1); + public DnsRepository(IOptions options) + { + _options = options.Value; + } + public List Find(Predicate query) { bool enteredLock = false; @@ -124,11 +134,10 @@ public class DnsRepository { list.AddLast(i); } - // Opt-In to disallow duplicate FQDN? - //else if (StringComparer.InvariantCultureIgnoreCase.Equals(record.FQDN, query.FQDN)) - //{ - // list.AddLast(i); - //} + else if (_options.UniqueHostnames && StringComparer.OrdinalIgnoreCase.Equals(record.FQDN, query.FQDN)) + { + list.AddLast(i); + } } return list; diff --git a/src/pdns-dhcp/Options/PowerDnsOptions.cs b/src/pdns-dhcp/Options/PowerDnsOptions.cs index 003db55..a9da9c8 100644 --- a/src/pdns-dhcp/Options/PowerDnsOptions.cs +++ b/src/pdns-dhcp/Options/PowerDnsOptions.cs @@ -2,7 +2,9 @@ namespace pdns_dhcp.Options; public class PowerDnsOptions { - public PowerDnsListenerOptions Listener { get; set; } = default!; + public PowerDnsListenerOptions Listener { get; init; } = default!; + + public bool UniqueHostnames { get; init; } = true; } public record class PowerDnsListenerOptions(string Socket); diff --git a/src/pdns-dhcp/appsettings.json b/src/pdns-dhcp/appsettings.json index cc80ee3..e345227 100644 --- a/src/pdns-dhcp/appsettings.json +++ b/src/pdns-dhcp/appsettings.json @@ -10,6 +10,7 @@ } }, "PowerDns": { + "UniqueHostnames": true, "Listener": { "Socket": "/run/pdns-dhcp/pdns.sock" }