@@ -42,18 +42,32 @@ func (s *Server) filterDNSRequest(
4242
4343 // TODO(a.garipov): Make CheckHost return a pointer.
4444 res = & resVal
45- switch {
46- case isRewrittenCNAME (res ):
45+
46+ checkReason := true
47+ if isRewrittenCNAME (res ) {
4748 // Resolve the new canonical name, not the original host name. The
4849 // original question is readded in processFilteringAfterResponse.
4950 dctx .origQuestion = q
5051 req .Question [0 ].Name = dns .Fqdn (res .CanonName )
51- case res .IsFiltered :
52+ checkReason = false
53+ } else if res .IsFiltered {
5254 l .DebugContext (ctx , "host is filtered" , "reason" , res .Reason )
5355 pctx .Res = s .genDNSFilterMessage (ctx , l , pctx , res )
54- case res .Reason .In (filtering .Rewritten , filtering .FilteredSafeSearch ):
56+ checkReason = false
57+ }
58+
59+ if ! checkReason {
60+ return res , err
61+ }
62+
63+ switch res .Reason {
64+ case
65+ filtering .FilteredSafeSearch ,
66+ filtering .Rewritten :
5567 pctx .Res = s .getCNAMEWithIPs (ctx , req , res .IPList , res .CanonName )
56- case res .Reason .In (filtering .RewrittenRule , filtering .RewrittenAutoHosts ):
68+ case
69+ filtering .RewrittenAutoHosts ,
70+ filtering .RewrittenRule :
5771 if err = s .filterDNSRewrite (ctx , req , res , pctx ); err != nil {
5872 return nil , err
5973 }
@@ -65,12 +79,15 @@ func (s *Server) filterDNSRequest(
6579// isRewrittenCNAME returns true if the request considered to be rewritten with
6680// CNAME and has no resolved IPs.
6781func isRewrittenCNAME (res * filtering.Result ) (ok bool ) {
68- return res .Reason .In (
82+ switch res .Reason {
83+ case
84+ filtering .FilteredSafeSearch ,
6985 filtering .Rewritten ,
70- filtering .RewrittenRule ,
71- filtering .FilteredSafeSearch ) &&
72- res .CanonName != "" &&
73- len (res .IPList ) == 0
86+ filtering .RewrittenRule :
87+ return res .CanonName != "" && len (res .IPList ) == 0
88+ default :
89+ return false
90+ }
7491}
7592
7693// checkHostRules checks the host against filters. It is safe for concurrent
@@ -161,9 +178,12 @@ func removeIPv6Hints(rr *dns.HTTPS) {
161178}
162179
163180// filterHTTPSRecords filters HTTPS answers information through all rule list
164- // filters of the server filters. Removes IPv6 hints if IPv6 resolving is
165- // disabled.
166- func (s * Server ) filterHTTPSRecords (rr * dns.HTTPS , setts * filtering.Settings ) (r * filtering.Result , err error ) {
181+ // filters of the server filters. It removes IPv6 hints if IPv6 resolving is
182+ // disabled. All arguments must not be nil.
183+ func (s * Server ) filterHTTPSRecords (
184+ rr * dns.HTTPS ,
185+ setts * filtering.Settings ,
186+ ) (r * filtering.Result , err error ) {
167187 if s .conf .AAAADisabled {
168188 removeIPv6Hints (rr )
169189 }
0 commit comments