parent
f33b02689c
commit
1b7492be6e
41 changed files with 3537 additions and 0 deletions
70
middleware/dnstap/setup.go
Normal file
70
middleware/dnstap/setup.go
Normal file
|
@ -0,0 +1,70 @@
|
|||
package dnstap
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/coredns/coredns/core/dnsserver"
|
||||
"github.com/coredns/coredns/middleware"
|
||||
"github.com/coredns/coredns/middleware/dnstap/out"
|
||||
|
||||
"github.com/mholt/caddy"
|
||||
"github.com/mholt/caddy/caddyfile"
|
||||
)
|
||||
|
||||
func init() {
|
||||
caddy.RegisterPlugin("dnstap", caddy.Plugin{
|
||||
ServerType: "dns",
|
||||
Action: wrapSetup,
|
||||
})
|
||||
}
|
||||
|
||||
func wrapSetup(c *caddy.Controller) error {
|
||||
if err := setup(c); err != nil {
|
||||
return middleware.Error("dnstap", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseConfig(c *caddyfile.Dispenser) (path string, full bool, err error) {
|
||||
c.Next() // directive name
|
||||
|
||||
if !c.Args(&path) {
|
||||
err = c.ArgErr()
|
||||
return
|
||||
}
|
||||
|
||||
full = c.NextArg() && c.Val() == "full"
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func setup(c *caddy.Controller) error {
|
||||
path, full, err := parseConfig(&c.Dispenser)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dnstap := Dnstap{Pack: full}
|
||||
|
||||
o, err := out.NewSocket(path)
|
||||
if err != nil {
|
||||
log.Printf("[WARN] Can't connect to %s at the moment", path)
|
||||
}
|
||||
dnstap.Out = o
|
||||
|
||||
c.OnShutdown(func() error {
|
||||
if err := o.Close(); err != nil {
|
||||
return fmt.Errorf("output: %s", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
dnsserver.GetConfig(c).AddMiddleware(
|
||||
func(next middleware.Handler) middleware.Handler {
|
||||
dnstap.Next = next
|
||||
return dnstap
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue