]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Properly update rcode-related metrics on RCodeAction hits
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 27 Jan 2023 16:30:32 +0000 (17:30 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 27 Jan 2023 16:30:32 +0000 (17:30 +0100)
pdns/dnsdist.cc

index 64ab5fafdf88f93a407fc9941cbc7f71647c4d24..bd3cec2a540a6bc9b084fa504d2f717e7c5abd1d 100644 (file)
@@ -861,20 +861,17 @@ bool processRulesResult(const DNSAction::Action& action, DNSQuestion& dq, std::s
     break;
   case DNSAction::Action::Nxdomain:
     dq.getHeader()->rcode = RCode::NXDomain;
-    dq.getHeader()->qr=true;
-    ++g_stats.ruleNXDomain;
+    dq.getHeader()->qr = true;
     return true;
     break;
   case DNSAction::Action::Refused:
     dq.getHeader()->rcode = RCode::Refused;
-    dq.getHeader()->qr=true;
-    ++g_stats.ruleRefused;
+    dq.getHeader()->qr = true;
     return true;
     break;
   case DNSAction::Action::ServFail:
     dq.getHeader()->rcode = RCode::ServFail;
-    dq.getHeader()->qr=true;
-    ++g_stats.ruleServFail;
+    dq.getHeader()->qr = true;
     return true;
     break;
   case DNSAction::Action::Spoof:
@@ -1033,14 +1030,14 @@ static bool applyRulesToQuery(LocalHolders& holders, DNSQuestion& dq, const stru
         updateBlockStats();
 
         dq.getHeader()->rcode = RCode::NXDomain;
-        dq.getHeader()->qr=true;
+        dq.getHeader()->qr = true;
         return true;
       case DNSAction::Action::Refused:
         vinfolog("Query from %s for %s refused because of dynamic block", dq.ids.origRemote.toStringWithPort(), dq.ids.qname.toLogString());
         updateBlockStats();
 
         dq.getHeader()->rcode = RCode::Refused;
-        dq.getHeader()->qr=true;
+        dq.getHeader()->qr = true;
         return true;
       case DNSAction::Action::Truncate:
         if (!dq.overTCP()) {
@@ -1072,13 +1069,13 @@ static bool applyRulesToQuery(LocalHolders& holders, DNSQuestion& dq, const stru
   }
 #endif /* DISABLE_DYNBLOCKS */
 
-  DNSAction::Action action=DNSAction::Action::None;
+  DNSAction::Action action = DNSAction::Action::None;
   string ruleresult;
   bool drop = false;
-  for(const auto& lr : *holders.ruleactions) {
-    if(lr.d_rule->matches(&dq)) {
+  for (const auto& lr : *holders.ruleactions) {
+    if (lr.d_rule->matches(&dq)) {
       lr.d_rule->d_matches++;
-      action=(*lr.d_action)(&dq, &ruleresult);
+      action = (*lr.d_action)(&dq, &ruleresult);
       if (processRulesResult(action, dq, ruleresult, drop)) {
         break;
       }
@@ -1283,6 +1280,17 @@ ProcessQueryResult processQueryAfterRules(DNSQuestion& dq, LocalHolders& holders
         return ProcessQueryResult::Drop;
       }
 
+      const auto rcode = dq.getHeader()->rcode;
+      if (rcode == RCode::NXDomain) {
+        ++g_stats.ruleNXDomain;
+      }
+      else if (rcode == RCode::Refused) {
+        ++g_stats.ruleRefused;
+      }
+      else if (rcode == RCode::ServFail) {
+        ++g_stats.ruleServFail;
+      }
+
       ++g_stats.selfAnswered;
       ++dq.ids.cs->responses;
       return ProcessQueryResult::SendAnswer;