RP works with dotted hosts

This commit is contained in:
Thomas Limoncelli 2025-12-04 14:51:32 -05:00
parent b0a909b853
commit 843478172c
No known key found for this signature in database
5 changed files with 38 additions and 7 deletions

View file

@ -179,6 +179,12 @@ func makeTests() []*TestGroup {
tc("Create RP", rp("foo", "other.example.com.", "bar.com.")),
tc("Create RP", rp("foo", "other.example.com.", "example.com.")),
),
testgroup("RP",
requires(providers.CanUseRP),
tc("Create RP", rp("foo", "user", "server")),
tc("Create RP", rp("foo", "user2", "server")),
tc("Create RP", rp("foo", "user2", "waiter")),
),
// TXT

View file

@ -1,10 +1,13 @@
package rtype
import (
"fmt"
"github.com/StackExchange/dnscontrol/v4/models"
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
"github.com/miekg/dns"
"github.com/miekg/dns/dnsutil"
)
func init() {
@ -27,10 +30,11 @@ func (handle *RP) FromArgs(dcn *domaintags.DomainNameVarieties, rec *models.Reco
}
fields := &RP{
dns.RP{
Mbox: args[1].(string),
Txt: args[2].(string),
Mbox: dnsutil.AddOrigin(args[1].(string), dcn.NameASCII),
Txt: dnsutil.AddOrigin(args[2].(string), dcn.NameASCII),
},
}
fmt.Printf("RP FromArgs: %+v\n", fields)
return handle.FromStruct(dcn, rec, args[0].(string), fields)
}

View file

@ -99,7 +99,18 @@ func NewRecordConfigFromStruct(name string, ttl uint32, t string, fields any, dc
// setRecordNames updates the .Name* fields.
func setRecordNames(rec *models.RecordConfig, dcn *domaintags.DomainNameVarieties, n string) {
// FYI(tlim): This code could be collapse
if strings.HasSuffix(n, ".") {
nr := n[:len(n)-1]
rec.Name = strings.ToLower(domaintags.EfficientToASCII(nr))
rec.NameRaw = nr
rec.NameUnicode = domaintags.EfficientToUnicode(rec.Name)
rec.NameFQDN = rec.Name
rec.NameFQDNRaw = rec.NameRaw
rec.NameFQDNUnicode = rec.NameUnicode
return
}
if rec.SubDomain == "" {
// Not _EXTEND() mode:
if n == "@" {
@ -109,9 +120,6 @@ func setRecordNames(rec *models.RecordConfig, dcn *domaintags.DomainNameVarietie
rec.NameFQDN = dcn.NameASCII
rec.NameFQDNRaw = dcn.NameRaw
rec.NameFQDNUnicode = dcn.NameUnicode
rec.NameFQDN = dcn.NameASCII
rec.NameFQDNRaw = dcn.NameRaw
rec.NameFQDNUnicode = dcn.NameUnicode
} else {
rec.Name = strings.ToLower(domaintags.EfficientToASCII(n))
rec.NameRaw = n

View file

@ -172,6 +172,20 @@ func TestSetRecordNames(t *testing.T) {
NameFQDNUnicode: "www.bücher.bücher.com",
},
},
{
name: "dotted_label",
rec: &models.RecordConfig{},
dc: dc,
n: "example.com.",
expectedRec: &models.RecordConfig{
Name: "example.com",
NameRaw: "example.com",
NameUnicode: "example.com",
NameFQDN: "example.com",
NameFQDNRaw: "example.com",
NameFQDNUnicode: "example.com",
},
},
}
for _, tt := range tests {

View file

@ -215,7 +215,6 @@ func ParseZoneContents(content string, zoneName string, zonefileName string) (mo
switch rtype {
case dns.TypeRP:
name := rr.Header().Name
name = strings.TrimSuffix(name, ".")
prec, err = rtypecontrol.NewRecordConfigFromStruct(name, rr.Header().Ttl, "RP", rr, domaintags.MakeDomainNameVarieties(zoneName))
if err != nil {
return nil, err