fixed hostname processing

This commit is contained in:
cynic 2024-05-21 08:50:54 +00:00
parent 73c604e9c4
commit 1919aed4e6

View File

@ -4,6 +4,7 @@ import (
"errors" "errors"
"net" "net"
"sync" "sync"
"strings"
"github.com/gologme/log" "github.com/gologme/log"
"github.com/miekg/dns" "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) var remoteLookups = make(map[string][]dns.Question)
m := new(dns.Msg) m := new(dns.Msg)
m.SetReply(r) m.SetReply(r)
s.log.Debugln(r.String()) s.log.Debugln(r.String()) // DEBUG
s.log.Debugln(s.networks) // DEBUG s.log.Debugln(s.networks) // DEBUG
var tldList []string var tldList []string
for tld := range s.networks { for tld := range s.networks {
tldList = append(tldList, tld) tldList = append(tldList, tld)
} }
s.log.Debugln(tldList) // DEBUG s.log.Debugln("tldList:", tldList) // DEBUG
for _, q := range r.Question { for _, q := range r.Question {
s.log.Debugln("q.Name:", q.Name) // DEBUG
labels := dns.SplitDomainName(q.Name) labels := dns.SplitDomainName(q.Name)
s.log.Debugln(labels) // DEBUG s.log.Debugln("labels:", labels) // DEBUG
if len(labels) < 2 { if len(labels) < 2 {
s.log.Debugln("Error: invalid domain requested") s.log.Debugln("Error: invalid domain requested")
continue 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) resolvedAddr, err := IPFromDomain(&subDomain)
if err != nil { if err != nil {
s.log.Debugln(err) s.log.Debugln(err)
continue 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) { if subnet, ok := s.networks[tld]; ok && subnet.Contains(resolvedAddr) {
remoteLookups[resolvedAddr.String()] = append(remoteLookups[resolvedAddr.String()], q) remoteLookups[resolvedAddr.String()] = append(remoteLookups[resolvedAddr.String()], q)
} else { } else {