@@ -6,6 +6,7 @@ package main
66import (
77 "fmt"
88 "strings"
9+ "time"
910 "github.com/miekg/dns"
1011)
1112
@@ -53,6 +54,9 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
5354 msg .SetReply (r )
5455 msg .Authoritative = true
5556
57+ start := time .Now ()
58+ status := ""
59+
5660 if len (r .Question ) == 0 {
5761 msg .Rcode = dns .RcodeFormatError
5862 _ = w .WriteMsg (msg )
@@ -66,9 +70,6 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
6670 }
6771
6872 q := r .Question [0 ]
69- queryType := dns .TypeToString [q .Qtype ]
70-
71- logMsg (LOG_DEBUG , "[DNS Requery]: Type=%s Name=%s" , queryType , q .Name )
7273
7374 switch q .Qtype {
7475
@@ -78,7 +79,7 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
7879
7980 msg .Rcode = dns .RcodeRefused
8081
81- logMsg ( LOG_VERBOSE , "[DNS Result/Refused]: Type=%s Name=%s" , queryType , q . Name )
82+ status = "Refused"
8283 stats .ReqDnsWrongZone .Add (1 )
8384 break // fall through to w.WriteMsg
8485 }
@@ -88,7 +89,7 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
8889 // Malformed label count — not a valid RBL query
8990 msg .Rcode = dns .RcodeFormatError
9091
91- logMsg ( LOG_VERBOSE , "[DNS Result/Malformed]: Type=%s Name=%s" , queryType , q . Name )
92+ status = "Malformed"
9293 stats .ReqDnsInvalidQuery .Add (1 )
9394 break
9495 }
@@ -100,25 +101,23 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
100101 msg .Answer = append (msg .Answer , rr )
101102 msg .Rcode = dns .RcodeSuccess
102103
103- logMsg ( LOG_VERBOSE , "[DNS Result/Found]: Type=%s Name=%s" , queryType , q . Name )
104+ status = "Found"
104105 stats .ReqDnsBlocked .Add (1 )
105106
106107 } else {
107108 // Known zone, not listed -> NXDOMAIN (RBL semantics)
108109 msg .Rcode = dns .RcodeNameError
109110
110- logMsg ( LOG_VERBOSE , "[DNS Result/NotFound]: Type=%s Name=%s" , queryType , q . Name )
111+ status = "NotFound"
111112 stats .ReqDnsNotListed .Add (1 )
112113 }
113114
114115 case dns .TypePTR :
115116
116- logMsg (LOG_VERBOSE , "[DNS Query/PTR]: name=%s type=%s" , q .Name , queryType )
117-
118117 if ! dns .IsSubDomain ("in-addr.arpa." , q .Name ) {
119118 msg .Rcode = dns .RcodeRefused
120119
121- logMsg ( LOG_VERBOSE , "[DNS Result/NO-IN-ARPA]: Type=%s Name=%s" , queryType , q . Name )
120+ status = "WrongZone"
122121 stats .ReqDnsWrongZone .Add (1 )
123122 break
124123 }
@@ -127,7 +126,7 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
127126 if ! ok {
128127 msg .Rcode = dns .RcodeFormatError
129128
130- logMsg ( LOG_VERBOSE , "[DNS Result/Invalid Query]: name=%s type=%s" , q . Name , queryType )
129+ status = "Invalid IP"
131130 stats .ReqDnsInvalidQuery .Add (1 )
132131 break
133132 }
@@ -136,30 +135,31 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
136135 _ , blocked := ipTableLookup (ip )
137136
138137 if blocked {
139- rr , _ := dns .NewRR (q .Name + " 10 IN PTR " + reverseHost + "." )
138+ rr , _ := dns .NewRR (q .Name + " 10 IN PTR " + gReverseHost + "." )
140139 msg .Answer = append (msg .Answer , rr )
141140 msg .Rcode = dns .RcodeSuccess
142141
143- logMsg ( LOG_VERBOSE , "[DNS Result/Blocked]: name=%s type=%s" , q . Name , queryType )
142+ status = "Blocked"
144143 stats .ReqDnsBlocked .Add (1 )
145144
146145 } else {
147146 // Not listed -> NXDOMAIN (RBL semantics)
148147 msg .Rcode = dns .RcodeNameError
149148
150- logMsg ( LOG_VERBOSE , "[DNS Result/NotFound]: name=%s type=%s" , q . Name , queryType )
149+ status = "NotFound"
151150 stats .ReqDnsNotListed .Add (1 )
152151 }
153152
154153 default :
155154 msg .Rcode = dns .RcodeRefused
156-
157- logMsg (LOG_VERBOSE , "[DNS Result/Unhandled]: name=%s type=%s" , q .Name , queryType )
155+ status = "Unhandled"
158156 stats .ReqDnsOtherQueryType .Add (1 )
159157 break
160158 }
161159
162160 _ = w .WriteMsg (msg )
161+
162+ logDnsReq (r , start , status )
163163}
164164
165165// rblQueryToIP extracts and reverses the IP address encoded in an RBL query name.
0 commit comments