diff --git a/plugin/loop/setup.go b/plugin/loop/setup.go index 4e076c687..0a2c94aef 100644 --- a/plugin/loop/setup.go +++ b/plugin/loop/setup.go @@ -31,7 +31,10 @@ func setup(c *caddy.Controller) error { go func() { deadline := time.Now().Add(30 * time.Second) conf := dnsserver.GetConfig(c) - lh := conf.ListenHosts[0] + lh := "" + if len(conf.ListenHosts) > 0 { + lh = conf.ListenHosts[0] + } addr := net.JoinHostPort(lh, conf.Port) for time.Now().Before(deadline) { diff --git a/plugin/trace/setup.go b/plugin/trace/setup.go index 5721368fb..a6ecdfe85 100644 --- a/plugin/trace/setup.go +++ b/plugin/trace/setup.go @@ -37,7 +37,7 @@ func traceParse(c *caddy.Controller) (*trace, error) { ) cfg := dnsserver.GetConfig(c) - if cfg.ListenHosts[0] != "" { + if len(cfg.ListenHosts) > 0 && cfg.ListenHosts[0] != "" { tr.serviceEndpoint = cfg.ListenHosts[0] + ":" + cfg.Port } diff --git a/test/bind_test.go b/test/bind_test.go new file mode 100644 index 000000000..a0e167d7e --- /dev/null +++ b/test/bind_test.go @@ -0,0 +1,24 @@ +package test + +import "testing" + +func TestBind_FilterAll(t *testing.T) { + t.Parallel() + corefile := `.:0 { + bind 127.0.0.1 { + except 127.0.0.1 + } + trace + loop + whoami + }` + inst, err := CoreDNSServer(corefile) + if inst != nil { + CoreDNSServerStop(inst) + } + if err == nil { + t.Log("server started; stopping immediately") + } else { + t.Logf("server failed to start as expected without listeners: %v", err) + } +}