@@ -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,27 +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 )
67+ } else {
68+ s .updateState (stateManager )
7469 }
7570 }
7671
@@ -85,6 +80,8 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
8580 searchDomains = append (searchDomains , strings .TrimSuffix ("" + dConf .Domain , "." ))
8681 }
8782
83+ var err error
84+
8885 matchKey := getKeyWithInput (netbirdDNSStateKeyFormat , matchSuffix )
8986 if len (matchDomains ) != 0 {
9087 err = s .addMatchDomains (matchKey , strings .Join (matchDomains , " " ), config .ServerIP , config .ServerPort )
@@ -95,6 +92,7 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
9592 if err != nil {
9693 return fmt .Errorf ("add match domains: %w" , err )
9794 }
95+ s .updateState (stateManager )
9896
9997 searchKey := getKeyWithInput (netbirdDNSStateKeyFormat , searchSuffix )
10098 if len (searchDomains ) != 0 {
@@ -106,6 +104,7 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
106104 if err != nil {
107105 return fmt .Errorf ("add search domains: %w" , err )
108106 }
107+ s .updateState (stateManager )
109108
110109 if err := s .flushDNSCache (); err != nil {
111110 log .Errorf ("failed to flush DNS cache: %v" , err )
@@ -114,6 +113,12 @@ func (s *systemConfigurator) applyDNSConfig(config HostDNSConfig, stateManager *
114113 return nil
115114}
116115
116+ func (s * systemConfigurator ) updateState (stateManager * statemanager.Manager ) {
117+ if err := stateManager .UpdateState (& ShutdownState {CreatedKeys : maps .Keys (s .createdKeys )}); err != nil {
118+ log .Errorf ("failed to update shutdown state: %s" , err )
119+ }
120+ }
121+
117122func (s * systemConfigurator ) string () string {
118123 return "scutil"
119124}
@@ -167,18 +172,20 @@ func (s *systemConfigurator) removeKeyFromSystemConfig(key string) error {
167172func (s * systemConfigurator ) addLocalDNS () error {
168173 if ! s .systemDNSSettings .ServerIP .IsValid () || len (s .systemDNSSettings .Domains ) == 0 {
169174 if err := s .recordSystemDNSSettings (true ); err != nil {
170- log .Errorf ("Unable to get system DNS configuration" )
171175 return fmt .Errorf ("recordSystemDNSSettings(): %w" , err )
172176 }
173177 }
174178 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 {
179+ if ! s .systemDNSSettings .ServerIP .IsValid () || len (s .systemDNSSettings .Domains ) == 0 {
181180 log .Info ("Not enabling local DNS server" )
181+ return nil
182+ }
183+
184+ if err := s .addSearchDomains (
185+ localKey ,
186+ strings .Join (s .systemDNSSettings .Domains , " " ), s .systemDNSSettings .ServerIP , s .systemDNSSettings .ServerPort ,
187+ ); err != nil {
188+ return fmt .Errorf ("add search domains: %w" , err )
182189 }
183190
184191 return nil
0 commit comments