Skip to content

Commit 81026ad

Browse files
Merge remote-tracking branch 'qnt-dmitry/master' into wildcardfix
2 parents a33c09a + 17f4513 commit 81026ad

1 file changed

Lines changed: 23 additions & 2 deletions

File tree

dns.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,31 @@ func (d *DNSServer) readQuery(m *dns.Msg) {
130130
}
131131
}
132132

133+
func (d *DNSServer) getRecordByDomainName(domainName string) (Records, bool) {
134+
lowerName := strings.ToLower(domainName)
135+
domain, ok := d.Domains[lowerName]
136+
if !ok {
137+
split := strings.Split(lowerName, ".")
138+
for len(split) > 0 && !ok {
139+
split[0] = "*"
140+
wildName := strings.Join(split, ".")
141+
domain, ok = d.Domains[wildName]
142+
newsplit := append(split[:0], split[1:]...)
143+
split = newsplit
144+
}
145+
if ok {
146+
for i := 0; i < len(domain.Records); i++ {
147+
domain.Records[i].Header().Name = lowerName
148+
}
149+
}
150+
}
151+
return domain, ok
152+
}
153+
133154
func (d *DNSServer) getRecord(q dns.Question) ([]dns.RR, error) {
134155
var rr []dns.RR
135156
var cnames []dns.RR
136-
domain, ok := d.Domains[strings.ToLower(q.Name)]
157+
domain, ok := d.getRecordByDomainName(q.Name)
137158
if !ok {
138159
return rr, fmt.Errorf("No records for domain %s", q.Name)
139160
}
@@ -156,7 +177,7 @@ func (d *DNSServer) answeringForDomain(name string) bool {
156177
if d.Domain == strings.ToLower(name) {
157178
return true
158179
}
159-
_, ok := d.Domains[strings.ToLower(name)]
180+
_, ok := d.getRecordByDomainName(name)
160181
return ok
161182
}
162183

0 commit comments

Comments
 (0)