aboutsummaryrefslogtreecommitdiff
path: root/rescached.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2026-02-03 03:58:01 +0700
committerShulhan <ms@kilabit.info>2026-02-03 03:59:04 +0700
commitd30b17c4db1392c19b11c3af7a47051f8dd6568a (patch)
tree4b3f0ec995c60203261269f883a48097138b855c /rescached.go
parent58678a935adbf324c4a36dbddcc286f6a6f4f655 (diff)
downloadrescached-d30b17c4db1392c19b11c3af7a47051f8dd6568a.tar.xz
all: add option to set minimum TTL
In the rescached.cfg, we add option where user can force the minimum TTL in the DNS answer. This option is not a standard and not recommended used in public facing network. It should be used only for personal and private network.
Diffstat (limited to 'rescached.go')
-rw-r--r--rescached.go24
1 files changed, 23 insertions, 1 deletions
diff --git a/rescached.go b/rescached.go
index 0fb23a5..0e6edfb 100644
--- a/rescached.go
+++ b/rescached.go
@@ -18,7 +18,7 @@ import (
)
// Version of program, overwritten by build.
-var Version = `4.4.4`
+var Version = `4.5.0`
// Debug level, set by configuration as "rescached::debug".
var Debug int
@@ -51,6 +51,8 @@ func New(env *Environment) (srv *Server, err error) {
return nil, err
}
+ srv.initHooks()
+
return srv, nil
}
@@ -237,3 +239,23 @@ func (srv *Server) watchResolvConf() {
srv.dns.RestartForwarders(srv.env.NameServers)
}
}
+
+func (srv *Server) initHooks() {
+ if srv.env.MinimumTTL > 0 {
+ srv.env.ServerOptions.OnAnswerReceived = srv.onAnswerReceived
+ }
+}
+
+func (srv *Server) onAnswerReceived(answer *dns.Answer) {
+ var isLower bool
+ for x := range len(answer.Message.Answer) {
+ if answer.Message.Answer[x].TTL < srv.env.MinimumTTL {
+ isLower = true
+ break
+ }
+ }
+ if isLower {
+ answer.Message.SetTTL(srv.env.MinimumTTL)
+ answer.TTL = srv.env.MinimumTTL
+ }
+}