From 0502ef6cc7e52b9cdeb42e9462ddbb5294183a0f Mon Sep 17 00:00:00 2001 From: Eugene Bujak Date: Fri, 30 Nov 2018 13:51:15 +0300 Subject: [PATCH] dnsforward -- initialize all dnsfilter settings at start and reconfigure --- dnsforward/dnsforward.go | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/dnsforward/dnsforward.go b/dnsforward/dnsforward.go index 7d15d44a..cde93571 100644 --- a/dnsforward/dnsforward.go +++ b/dnsforward/dnsforward.go @@ -178,7 +178,12 @@ func (s *Server) Start(config *ServerConfig) error { if s.dnsFilter == nil { log.Printf("Creating dnsfilter") - s.dnsFilter = dnsfilter.New(nil) + dnsFilterConfig := &config.Config + s.dnsFilter = dnsfilter.New(dnsFilterConfig) + // add rules only if they are enabled + if s.FilteringEnabled { + s.dnsFilter.AddRules(s.Filters) + } } go s.packetLoop() @@ -308,7 +313,7 @@ func (s *Server) reconfigureUpstreams(new ServerConfig) { s.Upstreams = new.Upstreams } -func (s *Server) reconfigureFilters(new ServerConfig) { +func (s *Server) reconfigureFiltering(new ServerConfig) { newFilters := new.Filters if len(newFilters) == 0 { newFilters = defaultValues.Filters @@ -317,11 +322,22 @@ func (s *Server) reconfigureFilters(new ServerConfig) { if len(oldFilters) == 0 { oldFilters = defaultValues.Filters } - if reflect.DeepEqual(newFilters, oldFilters) { - // they're exactly the same, do nothing + + needUpdate := false + if !reflect.DeepEqual(newFilters, oldFilters) { + needUpdate = true + } + + if !reflect.DeepEqual(new.FilteringConfig, s.FilteringConfig) { + needUpdate = true + } + + if !needUpdate { + // nothing to do, everything is same return } + // TODO: instead of creating new dnsfilter, change existing one's settings and filters dnsFilter := dnsfilter.New(&new.Config) // sets safebrowsing, safesearch and parental // add rules only if they are enabled @@ -332,6 +348,7 @@ func (s *Server) reconfigureFilters(new ServerConfig) { s.Lock() oldDnsFilter := s.dnsFilter s.dnsFilter = dnsFilter + s.FilteringConfig = new.FilteringConfig s.Unlock() oldDnsFilter.Destroy() @@ -340,7 +357,7 @@ func (s *Server) reconfigureFilters(new ServerConfig) { func (s *Server) Reconfigure(new ServerConfig) error { s.reconfigureBlockedResponseTTL(new) s.reconfigureUpstreams(new) - s.reconfigureFilters(new) + s.reconfigureFiltering(new) err := s.reconfigureListenAddr(new) if err != nil {