aboutsummaryrefslogtreecommitdiff
path: root/rescached.go
diff options
context:
space:
mode:
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
+ }
+}