cmd/ctrld,internal/dns: support systemd-networkd dbus

For interface managed by systemd-networkd, systemd-resolved can not
reset DNS. To fix this, attempting to check before the run loop and set
the suitable manager for the system.

Updates #55
This commit is contained in:
Cuong Manh Le
2023-02-10 21:50:08 +07:00
committed by Cuong Manh Le
parent e385547461
commit 997ec342e0
2 changed files with 102 additions and 29 deletions

View File

@@ -80,16 +80,20 @@ func setDNS(iface *net.Interface, nameservers []string) error {
return nil
}
func resetDNS(iface *net.Interface) error {
if r, err := dns.NewOSConfigurator(logf, iface.Name); err == nil {
if err := r.Close(); err != nil {
mainLog.Error().Err(err).Msg("failed to rollback DNS setting")
return err
func resetDNS(iface *net.Interface) (err error) {
defer func() {
if err == nil {
return
}
if r.Mode() == "direct" {
return nil
if r, oerr := dns.NewOSConfigurator(logf, iface.Name); oerr == nil {
_ = r.SetDNS(dns.OSConfig{})
if err := r.Close(); err != nil {
mainLog.Error().Err(err).Msg("failed to rollback DNS setting")
return
}
err = nil
}
}
}()
var ns []string
c, err := nclient4.New(iface.Name)