diff --git a/client/internal/dns/host_linux.go b/client/internal/dns/host_linux.go index ffb5098c7..368c7e35e 100644 --- a/client/internal/dns/host_linux.go +++ b/client/internal/dns/host_linux.go @@ -68,6 +68,16 @@ func getOSDNSManagerType() (osManagerType, error) { return systemdManager, nil } if strings.Contains(text, "resolvconf") { + if isDbusListenerRunning(systemdResolvedDest, systemdDbusObjectNode) { + var value string + err = getSystemdDbusProperty(systemdDbusResolvConfModeProperty, &value) + if err == nil { + if value == systemdDbusResolvConfModeForeign { + return systemdManager, nil + } + } + log.Errorf("got an error while checking systemd resolv conf mode, error: %s", err) + } return resolvConfManager, nil } } diff --git a/client/internal/dns/systemd_linux.go b/client/internal/dns/systemd_linux.go index 54a73968a..d738f949b 100644 --- a/client/internal/dns/systemd_linux.go +++ b/client/internal/dns/systemd_linux.go @@ -20,11 +20,13 @@ const ( systemdDbusObjectNode = "/org/freedesktop/resolve1" systemdDbusGetLinkMethod = systemdDbusManagerInterface + ".GetLink" systemdDbusFlushCachesMethod = systemdDbusManagerInterface + ".FlushCaches" + systemdDbusResolvConfModeProperty = systemdDbusManagerInterface + ".ResolvConfMode" systemdDbusLinkInterface = "org.freedesktop.resolve1.Link" systemdDbusRevertMethodSuffix = systemdDbusLinkInterface + ".Revert" systemdDbusSetDNSMethodSuffix = systemdDbusLinkInterface + ".SetDNS" systemdDbusSetDefaultRouteMethodSuffix = systemdDbusLinkInterface + ".SetDefaultRoute" systemdDbusSetDomainsMethodSuffix = systemdDbusLinkInterface + ".SetDomains" + systemdDbusResolvConfModeForeign = "foreign" ) type systemdDbusConfigurator struct { @@ -183,3 +185,18 @@ func (s *systemdDbusConfigurator) callLinkMethod(method string, value any) error return nil } + +func getSystemdDbusProperty(property string, store any) error { + obj, closeConn, err := getDbusObject(systemdResolvedDest, systemdDbusObjectNode) + if err != nil { + return fmt.Errorf("got error while attempting to retrieve the systemd dns manager object, error: %s", err) + } + defer closeConn() + + v, e := obj.GetProperty(property) + if e != nil { + return fmt.Errorf("got an error getting property %s: %v", property, e) + } + + return v.Store(store) +}