don't overwrite OS resolver nameservers if there arent any

This commit is contained in:
Alex
2025-02-06 16:12:10 -05:00
committed by Cuong Manh Le
parent fef85cadeb
commit 917052723d
4 changed files with 15 additions and 6 deletions

View File

@@ -1249,8 +1249,12 @@ func (p *prog) reinitializeOSResolver(networkChange bool) {
mainLog.Load().Debug().Msg("DNS reset completed")
mainLog.Load().Debug().Msg("initializing OS resolver")
ns := ctrld.InitializeOsResolver()
mainLog.Load().Warn().Msgf("re-initialized OS resolver with nameservers: %v", ns)
ns := ctrld.InitializeOsResolver(true)
if len(ns) == 0 {
mainLog.Load().Warn().Msgf("no nameservers found, using existing OS resolver values")
} else {
mainLog.Load().Warn().Msgf("re-initialized OS resolver with nameservers: %v", ns)
}
// start leaking queries immediately// start leaking queries immediately
if networkChange {

View File

@@ -268,7 +268,7 @@ func (p *prog) preRun() {
func (p *prog) postRun() {
if !service.Interactive() {
p.resetDNS()
ns := ctrld.InitializeOsResolver()
ns := ctrld.InitializeOsResolver(false)
mainLog.Load().Debug().Msgf("initialized OS resolver with nameservers: %v", ns)
p.setDNS()
p.csSetDnsDone <- struct{}{}

View File

@@ -130,8 +130,13 @@ func availableNameservers() []string {
//
// It's the caller's responsibility to ensure the system DNS is in a clean state before
// calling this function.
func InitializeOsResolver() []string {
ns := initializeOsResolver(availableNameservers())
func InitializeOsResolver(guardAgainstNoNameservers bool) []string {
nameservers := availableNameservers()
// if no nameservers, return empty slice so we dont remove all nameservers
if len(nameservers) == 0 && guardAgainstNoNameservers {
return []string{}
}
ns := initializeOsResolver(nameservers)
resolverMutex.Lock()
defer resolverMutex.Unlock()
or = newResolverWithNameserver(ns)

View File

@@ -115,7 +115,7 @@ func Test_osResolver_InitializationRace(t *testing.T) {
for range n {
go func() {
defer wg.Done()
InitializeOsResolver()
InitializeOsResolver(false)
}()
}
wg.Wait()