@@ -13,6 +13,7 @@ import (
1313 "strings"
1414
1515 log "github.com/sirupsen/logrus"
16+ "golang.org/x/exp/maps"
1617
1718 "github.com/netbirdio/netbird/client/internal/statemanager"
1819)
@@ -50,28 +51,21 @@ func (s *systemConfigurator) supportCustomPort() bool {
5051}
5152
5253func (s * systemConfigurator ) applyDNSConfig (config HostDNSConfig , stateManager * statemanager.Manager ) error {
53- var err error
54-
55- if err := stateManager .UpdateState (& ShutdownState {}); err != nil {
56- log .Errorf ("failed to update shutdown state: %s" , err )
57- }
58-
5954 var (
6055 searchDomains []string
6156 matchDomains []string
6257 )
6358
64- err = s .recordSystemDNSSettings (true )
65- if err != nil {
59+ if err := s .recordSystemDNSSettings (true ); err != nil {
6660 log .Errorf ("unable to update record of System's DNS config: %s" , err .Error ())
6761 }
6862
6963 if config .RouteAll {
7064 searchDomains = append (searchDomains , "\" \" " )
71- err = s .addLocalDNS ()
72- if err != nil {
73- log .Infof ("failed to enable split DNS" )
65+ if err := s .addLocalDNS (); err != nil {
66+ log .Warnf ("failed to add local DNS: %v" , err )
7467 }
68+ s .updateState (stateManager )
7569 }
7670
7771 for _ , dConf := range config .Domains {
@@ -86,6 +80,7 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
8680 }
8781
8882 matchKey := getKeyWithInput (netbirdDNSStateKeyFormat , matchSuffix )
83+ var err error
8984 if len (matchDomains ) != 0 {
9085 err = s .addMatchDomains (matchKey , strings .Join (matchDomains , " " ), config .ServerIP , config .ServerPort )
9186 } else {
@@ -95,6 +90,7 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
9590 if err != nil {
9691 return fmt .Errorf ("add match domains: %w" , err )
9792 }
93+ s .updateState (stateManager )
9894
9995 searchKey := getKeyWithInput (netbirdDNSStateKeyFormat , searchSuffix )
10096 if len (searchDomains ) != 0 {
@@ -106,6 +102,7 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
106102 if err != nil {
107103 return fmt .Errorf ("add search domains: %w" , err )
108104 }
105+ s .updateState (stateManager )
109106
110107 if err := s .flushDNSCache (); err != nil {
111108 log .Errorf ("failed to flush DNS cache: %v" , err )
@@ -114,6 +111,12 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
114111 return nil
115112}
116113
114+ func (s * systemConfigurator ) updateState (stateManager * statemanager.Manager ) {
115+ if err := stateManager .UpdateState (& ShutdownState {CreatedKeys : maps .Keys (s .createdKeys )}); err != nil {
116+ log .Errorf ("failed to update shutdown state: %s" , err )
117+ }
118+ }
119+
117120func (s * systemConfigurator ) string () string {
118121 return "scutil"
119122}
@@ -167,18 +170,20 @@ func (s *systemConfigurator) removeKeyFromSystemConfig(key string) error {
167170func (s * systemConfigurator ) addLocalDNS () error {
168171 if ! s .systemDNSSettings .ServerIP .IsValid () || len (s .systemDNSSettings .Domains ) == 0 {
169172 if err := s .recordSystemDNSSettings (true ); err != nil {
170- log .Errorf ("Unable to get system DNS configuration" )
171173 return fmt .Errorf ("recordSystemDNSSettings(): %w" , err )
172174 }
173175 }
174176 localKey := getKeyWithInput (netbirdDNSStateKeyFormat , localSuffix )
175- if s .systemDNSSettings .ServerIP .IsValid () && len (s .systemDNSSettings .Domains ) != 0 {
176- err := s .addSearchDomains (localKey , strings .Join (s .systemDNSSettings .Domains , " " ), s .systemDNSSettings .ServerIP , s .systemDNSSettings .ServerPort )
177- if err != nil {
178- return fmt .Errorf ("couldn't add local network DNS conf: %w" , err )
179- }
180- } else {
177+ if ! s .systemDNSSettings .ServerIP .IsValid () || len (s .systemDNSSettings .Domains ) == 0 {
181178 log .Info ("Not enabling local DNS server" )
179+ return nil
180+ }
181+
182+ if err := s .addSearchDomains (
183+ localKey ,
184+ strings .Join (s .systemDNSSettings .Domains , " " ), s .systemDNSSettings .ServerIP , s .systemDNSSettings .ServerPort ,
185+ ); err != nil {
186+ return fmt .Errorf ("add search domains: %w" , err )
182187 }
183188
184189 return nil
0 commit comments