diff --git a/cmd/cli/ad_others.go b/cmd/cli/ad_others.go index eb1b506..6a7417f 100644 --- a/cmd/cli/ad_others.go +++ b/cmd/cli/ad_others.go @@ -7,4 +7,4 @@ import ( ) // addExtraSplitDnsRule adds split DNS rule if present. -func addExtraSplitDnsRule(_ *ctrld.Config) {} +func addExtraSplitDnsRule(_ *ctrld.Config) bool { return false } diff --git a/cmd/cli/ad_windows.go b/cmd/cli/ad_windows.go index a3e7917..9a64dfd 100644 --- a/cmd/cli/ad_windows.go +++ b/cmd/cli/ad_windows.go @@ -8,15 +8,15 @@ import ( ) // addExtraSplitDnsRule adds split DNS rule for domain if it's part of active directory. -func addExtraSplitDnsRule(cfg *ctrld.Config) { +func addExtraSplitDnsRule(cfg *ctrld.Config) bool { domain, err := getActiveDirectoryDomain() if err != nil { mainLog.Load().Debug().Msgf("unable to get active directory domain: %v", err) - return + return false } if domain == "" { mainLog.Load().Debug().Msg("no active directory domain found") - return + return false } for n, lc := range cfg.Listener { if lc.Policy == nil { @@ -26,12 +26,13 @@ func addExtraSplitDnsRule(cfg *ctrld.Config) { for _, rule := range lc.Policy.Rules { if _, ok := rule[domainRule]; ok { mainLog.Load().Debug().Msgf("domain rule already exist for listener.%s", n) - return + return false } } mainLog.Load().Debug().Msgf("adding active directory domain for listener.%s", n) lc.Policy.Rules = append(lc.Policy.Rules, ctrld.Rule{domainRule: []string{}}) } + return true } // getActiveDirectoryDomain returns AD domain name of this computer. diff --git a/cmd/cli/cli.go b/cmd/cli/cli.go index 0c4503e..502014e 100644 --- a/cmd/cli/cli.go +++ b/cmd/cli/cli.go @@ -1387,7 +1387,6 @@ func run(appCallback *AppCallback, stopCh chan struct{}) { } func writeConfigFile(cfg *ctrld.Config) error { - addExtraSplitDnsRule(cfg) if cfu := v.ConfigFileUsed(); cfu != "" { defaultConfigFile = cfu } else if configPath != "" { @@ -1440,6 +1439,7 @@ func readConfigFile(writeDefaultConfig, notice bool) bool { } nop := zerolog.Nop() _, _ = tryUpdateListenerConfig(&cfg, &nop, true) + addExtraSplitDnsRule(&cfg) if err := writeConfigFile(&cfg); err != nil { mainLog.Load().Fatal().Msgf("failed to write default config file: %v", err) } else { @@ -2092,6 +2092,9 @@ func mobileListenerIp() string { // than 127.0.0.1 with systemd-resolved. func updateListenerConfig(cfg *ctrld.Config) bool { updated, _ := tryUpdateListenerConfig(cfg, nil, true) + if addExtraSplitDnsRule(cfg) { + updated = true + } return updated } diff --git a/cmd/cli/prog.go b/cmd/cli/prog.go index f6d83ab..07c7677 100644 --- a/cmd/cli/prog.go +++ b/cmd/cli/prog.go @@ -209,6 +209,7 @@ func (p *prog) runWait() { continue } + addExtraSplitDnsRule(newCfg) if err := writeConfigFile(newCfg); err != nil { logger.Err(err).Msg("could not write new config") }