From 1919aed4e626e6ac7b55d60d73bf2b8687a634c6 Mon Sep 17 00:00:00 2001 From: cynic Date: Tue, 21 May 2024 08:50:54 +0000 Subject: [PATCH] fixed hostname processing --- pkg/meshname/server.go | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/pkg/meshname/server.go b/pkg/meshname/server.go index 9aaab5f..a8aabc5 100644 --- a/pkg/meshname/server.go +++ b/pkg/meshname/server.go @@ -4,6 +4,7 @@ import ( "errors" "net" "sync" + "strings" "github.com/gologme/log" "github.com/miekg/dns" @@ -92,33 +93,51 @@ func (s *MeshnameServer) handleMeshnameRequest(w dns.ResponseWriter, r *dns.Msg) var remoteLookups = make(map[string][]dns.Question) m := new(dns.Msg) m.SetReply(r) - s.log.Debugln(r.String()) + s.log.Debugln(r.String()) // DEBUG s.log.Debugln(s.networks) // DEBUG var tldList []string for tld := range s.networks { tldList = append(tldList, tld) } - s.log.Debugln(tldList) // DEBUG + s.log.Debugln("tldList:", tldList) // DEBUG for _, q := range r.Question { + s.log.Debugln("q.Name:", q.Name) // DEBUG labels := dns.SplitDomainName(q.Name) - s.log.Debugln(labels) // DEBUG + s.log.Debugln("labels:", labels) // DEBUG if len(labels) < 2 { s.log.Debugln("Error: invalid domain requested") continue } - subDomain := labels[len(labels)-2] - s.log.Debugln(subDomain) // DEBUG + + // process domain + input := strings.TrimSuffix(q.Name, ".") + subDomain := "" + tld := "" + for i := range tldList { + t := tldList[i] + if strings.HasSuffix(input, "."+t) { + // define tld + tld = t + domainParts := strings.SplitN(input, "."+t, 2) + firstPart := domainParts[0] + firstPartLabels := dns.SplitDomainName(firstPart) + // define hostname ("subDomain") + subDomain = firstPartLabels[len(firstPartLabels)-1] + } + } + //subDomain := labels[len(labels)-2] + s.log.Debugln("subDomain:", subDomain) // DEBUG resolvedAddr, err := IPFromDomain(&subDomain) if err != nil { s.log.Debugln(err) continue } - // check subnet validity - tld := labels[len(labels)-1] + // check subnet validity + //tld := labels[len(labels)-1] if subnet, ok := s.networks[tld]; ok && subnet.Contains(resolvedAddr) { remoteLookups[resolvedAddr.String()] = append(remoteLookups[resolvedAddr.String()], q) } else {