dns/ex/fksd/main.go
2012-08-05 11:20:23 +02:00

51 lines
1008 B
Go

package main
import (
"dns"
"flag"
"log"
"os"
)
var (
z = flag.String("zone", "", "zonefile to read")
o = flag.String("origin", "", "origin of the zone")
l = flag.Bool("log", false, "log incoming queries")
)
func main() {
flag.Parse()
if *z == "" {
log.Fatal("fksd: no zone")
}
if *o == "" {
log.Fatal("fksd: origin")
}
Z := make(map[string]*dns.Zone)
if e := addZone(Z, *o, *z); e != nil {
log.Fatal("fksd: %s\n", e.Error())
}
if e := addZone(Z, "nl.", "z/nl.db"); e != nil {
log.Fatal("fksd: %s\n", e.Error())
}
dns.HandleFunc(*o, func(w dns.ResponseWriter, req *dns.Msg) { serve(w, req, Z[dns.Fqdn(*o)]) })
dns.HandleFunc("nl.", func(w dns.ResponseWriter, req *dns.Msg) { serve(w, req, Z["nl."]) })
go func() {
err := dns.ListenAndServe(":8053", "udp", nil)
if err != nil {
log.Fatal("fksd: could not start")
}
}()
sig := make(chan os.Signal)
forever:
for {
select {
case <-sig:
log.Printf("fksd: signal received, stopping\n")
break forever
}
}
}