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
This commit is contained in:
Laurence
2026-03-12 12:26:03 +00:00
parent 8549dc8746
commit f250702177
5 changed files with 14 additions and 10 deletions

View File

@@ -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
}
}

View File

@@ -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)

View File

@@ -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
}
}

View File

@@ -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 {

View File

@@ -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
}