synthetic/setup.go
2024-02-08 17:44:51 -08:00

60 lines
1.4 KiB
Go

package synthetic
import (
"fmt"
"github.com/coredns/caddy"
"github.com/coredns/coredns/core/dnsserver"
"github.com/coredns/coredns/plugin"
"net"
)
// syntheticConfig holds the configuration options for the synthetic plugin.
type syntheticConfig struct {
net []*net.IPNet
forward string
}
// init registers this plugin.
func init() { plugin.Register("synthetic", setup) }
// setup is the function that gets called when the config parser see the token "synthetic".
func setup(c *caddy.Controller) error {
var config syntheticConfig
// Parse the configuration file
for c.Next() {
for c.NextBlock() {
switch v := c.Val(); v {
// Configuration for forward lookup zones for which to do resolution
case "net":
args := c.RemainingArgs()
for _, arg := range args {
_, cidr, err := net.ParseCIDR(arg)
if err == nil {
config.net = append(config.net, cidr)
} else {
return fmt.Errorf("synthetic: invalid reverse lookup cidr: %v", arg)
}
}
// Configuration for reverse lookup zones for the forward lookup zone name
case "forward":
args := c.RemainingArgs()
for _, arg := range args {
config.forward = arg
}
default:
return c.Errf("unknown property '%s'", v)
}
}
}
dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler {
return synthetic{Next: next, Config: config}
})
return nil
}