@@ -8,12 +8,13 @@ package dns
8
8
9
9
import (
10
10
"fmt"
11
+ "log/slog"
11
12
"math/rand"
12
13
"net"
14
+ "os"
13
15
"strings"
14
16
15
17
"github.com/blinklabs-io/cdnsd/internal/config"
16
- "github.com/blinklabs-io/cdnsd/internal/logging"
17
18
"github.com/blinklabs-io/cdnsd/internal/state"
18
19
19
20
"github.com/miekg/dns"
@@ -49,21 +50,25 @@ func Start() error {
49
50
50
51
func startListener (server * dns.Server ) {
51
52
if err := server .ListenAndServe (); err != nil {
52
- logging .GetLogger ().Fatalf ("failed to start DNS listener: %s" , err )
53
+ slog .Error (
54
+ fmt .Sprintf ("failed to start DNS listener: %s" , err ),
55
+ )
56
+ os .Exit (1 )
53
57
}
54
58
}
55
59
56
60
func handleQuery (w dns.ResponseWriter , r * dns.Msg ) {
57
- logger := logging .GetLogger ()
58
61
cfg := config .GetConfig ()
59
62
m := new (dns.Msg )
60
63
61
64
if cfg .Logging .QueryLog {
62
65
for _ , q := range r .Question {
63
- logger .Infof ("query: name: %s, type: %s, class: %s" ,
64
- q .Name ,
65
- dns .Type (q .Qtype ).String (),
66
- dns .Class (q .Qclass ).String (),
66
+ slog .Info (
67
+ fmt .Sprintf ("query: name: %s, type: %s, class: %s" ,
68
+ q .Name ,
69
+ dns .Type (q .Qtype ).String (),
70
+ dns .Class (q .Qclass ).String (),
71
+ ),
67
72
)
68
73
}
69
74
}
@@ -74,7 +79,9 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
74
79
strings .TrimSuffix (r .Question [0 ].Name , "." ),
75
80
)
76
81
if err != nil {
77
- logger .Errorf ("failed to lookup records in state: %s" , err )
82
+ slog .Error (
83
+ fmt .Sprintf ("failed to lookup records in state: %s" , err ),
84
+ )
78
85
return
79
86
}
80
87
if records != nil {
@@ -83,14 +90,18 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
83
90
for _ , tmpRecord := range records {
84
91
tmpRR , err := stateRecordToDnsRR (tmpRecord )
85
92
if err != nil {
86
- logger .Errorf ("failed to convert state record to dns.RR: %s" , err )
93
+ slog .Error (
94
+ fmt .Sprintf ("failed to convert state record to dns.RR: %s" , err ),
95
+ )
87
96
return
88
97
}
89
98
m .Answer = append (m .Answer , tmpRR )
90
99
}
91
100
// Send response
92
101
if err := w .WriteMsg (m ); err != nil {
93
- logger .Errorf ("failed to write response: %s" , err )
102
+ slog .Error (
103
+ fmt .Sprintf ("failed to write response: %s" , err ),
104
+ )
94
105
}
95
106
// We found our answer, to return from handler
96
107
return
@@ -101,10 +112,12 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
101
112
r .Question [0 ].Name ,
102
113
)
103
114
if err != nil {
104
- logger .Errorf (
105
- "failed to lookup nameservers for %s: %s" ,
106
- r .Question [0 ].Name ,
107
- err ,
115
+ slog .Error (
116
+ fmt .Sprintf (
117
+ "failed to lookup nameservers for %s: %s" ,
118
+ r .Question [0 ].Name ,
119
+ err ,
120
+ ),
108
121
)
109
122
}
110
123
if nameservers != nil {
@@ -119,15 +132,21 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
119
132
// Send failure response
120
133
m .SetRcode (r , dns .RcodeServerFailure )
121
134
if err := w .WriteMsg (m ); err != nil {
122
- logger .Errorf ("failed to write response: %s" , err )
135
+ slog .Error (
136
+ fmt .Sprintf ("failed to write response: %s" , err ),
137
+ )
123
138
}
124
- logger .Errorf ("failed to query domain nameserver: %s" , err )
139
+ slog .Error (
140
+ fmt .Sprintf ("failed to query domain nameserver: %s" , err ),
141
+ )
125
142
return
126
143
} else {
127
144
copyResponse (r , resp , m )
128
145
// Send response
129
146
if err := w .WriteMsg (m ); err != nil {
130
- logger .Errorf ("failed to write response: %s" , err )
147
+ slog .Error (
148
+ fmt .Sprintf ("failed to write response: %s" , err ),
149
+ )
131
150
}
132
151
return
133
152
}
@@ -161,7 +180,9 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
161
180
}
162
181
// Send response
163
182
if err := w .WriteMsg (m ); err != nil {
164
- logger .Errorf ("failed to write response: %s" , err )
183
+ slog .Error (
184
+ fmt .Sprintf ("failed to write response: %s" , err ),
185
+ )
165
186
}
166
187
// We found our answer, to return from handler
167
188
return
@@ -177,15 +198,21 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
177
198
// Send failure response
178
199
m .SetRcode (r , dns .RcodeServerFailure )
179
200
if err := w .WriteMsg (m ); err != nil {
180
- logger .Errorf ("failed to write response: %s" , err )
201
+ slog .Error (
202
+ fmt .Sprintf ("failed to write response: %s" , err ),
203
+ )
181
204
}
182
- logger .Errorf ("failed to query domain nameserver: %s" , err )
205
+ slog .Error (
206
+ fmt .Sprintf ("failed to query domain nameserver: %s" , err ),
207
+ )
183
208
return
184
209
} else {
185
210
copyResponse (r , resp , m )
186
211
// Send response
187
212
if err := w .WriteMsg (m ); err != nil {
188
- logger .Errorf ("failed to write response: %s" , err )
213
+ slog .Error (
214
+ fmt .Sprintf ("failed to write response: %s" , err ),
215
+ )
189
216
}
190
217
return
191
218
}
@@ -194,7 +221,9 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
194
221
// Return NXDOMAIN if we have no information about the requested domain or any of its parents
195
222
m .SetRcode (r , dns .RcodeNameError )
196
223
if err := w .WriteMsg (m ); err != nil {
197
- logger .Errorf ("failed to write response: %s" , err )
224
+ slog .Error (
225
+ fmt .Sprintf ("failed to write response: %s" , err ),
226
+ )
198
227
}
199
228
}
200
229
@@ -243,7 +272,6 @@ func randomNameserverAddress(nameservers map[string][]net.IP) net.IP {
243
272
}
244
273
245
274
func doQuery (msg * dns.Msg , address string , recursive bool ) (* dns.Msg , error ) {
246
- logger := logging .GetLogger ()
247
275
// Default to a random fallback server if no address is specified
248
276
if address == "" {
249
277
address = randomFallbackServer ()
@@ -252,22 +280,26 @@ func doQuery(msg *dns.Msg, address string, recursive bool) (*dns.Msg, error) {
252
280
if ! strings .Contains (address , ":" ) {
253
281
address = address + `:53`
254
282
}
255
- logger .Debugf (
256
- "querying %s: %s" ,
257
- address ,
258
- formatMessageQuestionSection (msg .Question ),
283
+ slog .Debug (
284
+ fmt .Sprintf (
285
+ "querying %s: %s" ,
286
+ address ,
287
+ formatMessageQuestionSection (msg .Question ),
288
+ ),
259
289
)
260
290
resp , err := dns .Exchange (msg , address )
261
291
if err != nil {
262
292
return nil , err
263
293
}
264
- logger .Debugf (
265
- "response: rcode=%s, authoritative=%v, authority=%s, answer=%s, extra=%s" ,
266
- dns .RcodeToString [resp .Rcode ],
267
- resp .Authoritative ,
268
- formatMessageAnswerSection (resp .Ns ),
269
- formatMessageAnswerSection (resp .Answer ),
270
- formatMessageAnswerSection (resp .Extra ),
294
+ slog .Debug (
295
+ fmt .Sprintf (
296
+ "response: rcode=%s, authoritative=%v, authority=%s, answer=%s, extra=%s" ,
297
+ dns .RcodeToString [resp .Rcode ],
298
+ resp .Authoritative ,
299
+ formatMessageAnswerSection (resp .Ns ),
300
+ formatMessageAnswerSection (resp .Answer ),
301
+ formatMessageAnswerSection (resp .Extra ),
302
+ ),
271
303
)
272
304
// Immediately return authoritative response
273
305
if resp .Authoritative {
0 commit comments