summaryrefslogtreecommitdiff
path: root/internal/config/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/config/config.go')
-rw-r--r--internal/config/config.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/internal/config/config.go b/internal/config/config.go
index f2624c2..1fa8069 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -27,8 +27,10 @@ type CacheConfig struct {
}
type ResolverConfig struct {
+ Mode string `toml:"mode"`
Timeout string `toml:"timeout"`
MaxDelegations int `toml:"max_delegations"`
+ Forwarders []string `toml:"forwarders"`
}
type BlocklistConfig struct {
@@ -71,6 +73,7 @@ func Default() Config{
MaxEntries: 100000,
},
Resolver: ResolverConfig{
+ Mode: "recursive",
Timeout: "2s",
MaxDelegations: 30,
},
@@ -111,6 +114,12 @@ func Merge(dst, src Config) Config {
if src.Resolver.MaxDelegations > 0 {
dst.Resolver.MaxDelegations = src.Resolver.MaxDelegations
}
+ if src.Resolver.Mode != "" {
+ dst.Resolver.Mode = src.Resolver.Mode
+ }
+ if len(src.Resolver.Forwarders) > 0 {
+ dst.Resolver.Forwarders = src.Resolver.Forwarders
+ }
if src.Blocklist.Response != "" {
dst.Blocklist.Response = src.Blocklist.Response
}
@@ -148,5 +157,15 @@ func (c Config) Validate() error {
default:
return fmt.Errorf("invalid blocklist response %q (want zero_ip or nxdomain)", c.Blocklist.Response)
}
+
+ switch c.Resolver.Mode {
+ case "recursive", "forward", "":
+ // nothing happened lol
+ default:
+ return fmt.Errorf("invalid resolver mode %q (recursive or forward)", c.Resolver.Mode)
+ }
+ if c.Resolver.Mode == "forward" && len(c.Resolver.Forwarders) == 0 {
+ return fmt.Errorf("resolver mode=forward requires at least one forwarder")
+ }
return nil
}