From d3d07deec637385c3dc9e9739f3a5bc55a5ad1a2 Mon Sep 17 00:00:00 2001 From: Michael Bridgen Date: Mon, 20 Oct 2014 18:11:14 +0100 Subject: [PATCH] Changed local domain handling 1. The local domain is now ".weave.local", which is safer from TLD pollution 2. If the name given for an IP isn't a subdomain of the local domain, ignore it --- server/http.go | 17 +++++++++++------ server/server.go | 4 ++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/server/http.go b/server/http.go index 34c929be..dedb8234 100644 --- a/server/http.go +++ b/server/http.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "log" + "github.com/miekg/dns" "net" "net/http" "strings" @@ -18,7 +19,7 @@ func parseUrl(url string) (identifier string, ipaddr string, err error) { return parts[2], parts[3], nil } -func ListenHttp(db Zone, port int) { +func ListenHttp(domain string, db Zone, port int) { http.HandleFunc("/name/", func(w http.ResponseWriter, r *http.Request) { switch r.Method { case "PUT": @@ -44,11 +45,15 @@ func ListenHttp(db Zone, port int) { http.Error(w, fmt.Sprintf("Invalid CIDR: %s", weave_cidr), http.StatusBadRequest) return } - log.Printf("Adding %s (%s) -> %s", name, local_ip, weave_cidr) - err = db.AddRecord(identifier, name, ip, weave_ip, subnet) - if err != nil { - http.Error(w, err.Error(), http.StatusConflict) - return + if dns.IsSubDomain(domain, name) { + log.Printf("Adding %s (%s) -> %s", name, local_ip, weave_cidr) + err = db.AddRecord(identifier, name, ip, weave_ip, subnet) + if err != nil { + http.Error(w, err.Error(), http.StatusConflict) + return + } + } else { + log.Printf("Ignoring name %s, not in %s", name, domain) } case "DELETE": identifier, weave_ipstr, err := parseUrl(r.URL.Path) diff --git a/server/server.go b/server/server.go index b219c4b9..975ccac1 100644 --- a/server/server.go +++ b/server/server.go @@ -8,7 +8,7 @@ import ( ) const ( - LOCAL_DOMAIN = "weave" + LOCAL_DOMAIN = "weave.local." ) func makeDNSFailResponse(r *dns.Msg) *dns.Msg { @@ -70,7 +70,7 @@ func notUsHandler() dns.HandlerFunc { } func StartServer(zone Zone, iface *net.Interface, dnsPort int, httpPort int, wait int) error { - go ListenHttp(zone, httpPort) + go ListenHttp(LOCAL_DOMAIN, zone, httpPort) mdnsClient, err := NewMDNSClient() if err != nil {