From f250702177d2b92db2ae92392e51b3af65793df5 Mon Sep 17 00:00:00 2001 From: Laurence Date: Thu, 12 Mar 2026 12:26:03 +0000 Subject: [PATCH] feat(DNS): Add static cleanup funcs To aid CLI in cleaning up configuration we expose static functions that know how to handle each provider and platform linked to https://github.com/fosrl/cli/issues/38 --- dns/override/dns_override_android.go | 5 +++-- dns/override/dns_override_darwin.go | 3 ++- dns/override/dns_override_ios.go | 5 +++-- dns/override/dns_override_unix.go | 8 ++++---- dns/override/dns_override_windows.go | 3 ++- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/dns/override/dns_override_android.go b/dns/override/dns_override_android.go index 97733e2..3c44a19 100644 --- a/dns/override/dns_override_android.go +++ b/dns/override/dns_override_android.go @@ -16,6 +16,7 @@ func RestoreDNSOverride() error { } // CleanupStaleState is a no-op on Android as DNS configuration is handled by the VpnService API -func CleanupStaleState() error { +func CleanupStaleState(interfaceName string) error { + _ = interfaceName return nil -} \ No newline at end of file +} diff --git a/dns/override/dns_override_darwin.go b/dns/override/dns_override_darwin.go index 6f9f8e4..77c267e 100644 --- a/dns/override/dns_override_darwin.go +++ b/dns/override/dns_override_darwin.go @@ -68,7 +68,8 @@ func RestoreDNSOverride() error { // to ensure DNS is working properly. // // On macOS, this cleans up any scutil DNS keys that were created but not removed. -func CleanupStaleState() error { +func CleanupStaleState(interfaceName string) error { + _ = interfaceName if err := platform.CleanupStaleDarwinDNS(); err != nil { logger.Warn("Failed to cleanup stale Darwin DNS config: %v", err) return fmt.Errorf("Darwin DNS cleanup: %w", err) diff --git a/dns/override/dns_override_ios.go b/dns/override/dns_override_ios.go index 43251f1..4178154 100644 --- a/dns/override/dns_override_ios.go +++ b/dns/override/dns_override_ios.go @@ -15,6 +15,7 @@ func RestoreDNSOverride() error { } // CleanupStaleState is a no-op on iOS as DNS configuration is handled by the system -func CleanupStaleState() error { +func CleanupStaleState(interfaceName string) error { + _ = interfaceName return nil -} \ No newline at end of file +} diff --git a/dns/override/dns_override_unix.go b/dns/override/dns_override_unix.go index d9763fb..fe2a7f6 100644 --- a/dns/override/dns_override_unix.go +++ b/dns/override/dns_override_unix.go @@ -106,11 +106,11 @@ func RestoreDNSOverride() error { // // It checks and cleans up stale state from all supported DNS managers: // - NetworkManager: removes /etc/NetworkManager/conf.d/olm-dns.conf -// - resolvconf: removes entry for the "olm" interface +// - resolvconf: removes entry for the provided interface // - File-based: restores /etc/resolv.conf from backup if it exists // // This is safe to call even if no stale state exists. -func CleanupStaleState() error { +func CleanupStaleState(interfaceName string) error { var errs []error // Clean up NetworkManager stale config @@ -121,8 +121,8 @@ func CleanupStaleState() error { logger.Debug("NetworkManager DNS cleanup completed") } - // Clean up resolvconf stale entries (use default interface name "olm") - if err := platform.CleanupStaleResolvconfDNS("olm"); err != nil { + // Clean up resolvconf stale entries for the provided interface + if err := platform.CleanupStaleResolvconfDNS(interfaceName); err != nil { logger.Warn("Failed to cleanup stale resolvconf DNS config: %v", err) errs = append(errs, fmt.Errorf("resolvconf cleanup: %w", err)) } else { diff --git a/dns/override/dns_override_windows.go b/dns/override/dns_override_windows.go index d6b6a91..fd57203 100644 --- a/dns/override/dns_override_windows.go +++ b/dns/override/dns_override_windows.go @@ -69,10 +69,11 @@ func RestoreDNSOverride() error { // // On Windows, DNS configuration is tied to the interface GUID. When the WireGuard // interface is recreated, it gets a new GUID, so there's no stale state to clean up. -func CleanupStaleState() error { +func CleanupStaleState(interfaceName string) error { // Windows DNS configuration via registry is interface-specific. // When the WireGuard interface is recreated, it gets a new GUID, // so there's no leftover state to clean up from previous sessions. + _ = interfaceName logger.Debug("Windows DNS cleanup: no stale state to clean (interface-specific)") return nil }