mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 13:46:07 +08:00
RP works with dotted hosts
This commit is contained in:
parent
b0a909b853
commit
843478172c
5 changed files with 38 additions and 7 deletions
|
|
@ -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.", "bar.com.")),
|
||||||
tc("Create RP", rp("foo", "other.example.com.", "example.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
|
// TXT
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
package rtype
|
package rtype
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/StackExchange/dnscontrol/v4/models"
|
"github.com/StackExchange/dnscontrol/v4/models"
|
||||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
|
"github.com/miekg/dns/dnsutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
@ -27,10 +30,11 @@ func (handle *RP) FromArgs(dcn *domaintags.DomainNameVarieties, rec *models.Reco
|
||||||
}
|
}
|
||||||
fields := &RP{
|
fields := &RP{
|
||||||
dns.RP{
|
dns.RP{
|
||||||
Mbox: args[1].(string),
|
Mbox: dnsutil.AddOrigin(args[1].(string), dcn.NameASCII),
|
||||||
Txt: args[2].(string),
|
Txt: dnsutil.AddOrigin(args[2].(string), dcn.NameASCII),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
fmt.Printf("RP FromArgs: %+v\n", fields)
|
||||||
|
|
||||||
return handle.FromStruct(dcn, rec, args[0].(string), fields)
|
return handle.FromStruct(dcn, rec, args[0].(string), fields)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,18 @@ func NewRecordConfigFromStruct(name string, ttl uint32, t string, fields any, dc
|
||||||
|
|
||||||
// setRecordNames updates the .Name* fields.
|
// setRecordNames updates the .Name* fields.
|
||||||
func setRecordNames(rec *models.RecordConfig, dcn *domaintags.DomainNameVarieties, n string) {
|
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 == "" {
|
if rec.SubDomain == "" {
|
||||||
// Not _EXTEND() mode:
|
// Not _EXTEND() mode:
|
||||||
if n == "@" {
|
if n == "@" {
|
||||||
|
|
@ -109,9 +120,6 @@ func setRecordNames(rec *models.RecordConfig, dcn *domaintags.DomainNameVarietie
|
||||||
rec.NameFQDN = dcn.NameASCII
|
rec.NameFQDN = dcn.NameASCII
|
||||||
rec.NameFQDNRaw = dcn.NameRaw
|
rec.NameFQDNRaw = dcn.NameRaw
|
||||||
rec.NameFQDNUnicode = dcn.NameUnicode
|
rec.NameFQDNUnicode = dcn.NameUnicode
|
||||||
rec.NameFQDN = dcn.NameASCII
|
|
||||||
rec.NameFQDNRaw = dcn.NameRaw
|
|
||||||
rec.NameFQDNUnicode = dcn.NameUnicode
|
|
||||||
} else {
|
} else {
|
||||||
rec.Name = strings.ToLower(domaintags.EfficientToASCII(n))
|
rec.Name = strings.ToLower(domaintags.EfficientToASCII(n))
|
||||||
rec.NameRaw = n
|
rec.NameRaw = n
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,20 @@ func TestSetRecordNames(t *testing.T) {
|
||||||
NameFQDNUnicode: "www.bücher.bücher.com",
|
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 {
|
for _, tt := range tests {
|
||||||
|
|
|
||||||
|
|
@ -215,7 +215,6 @@ func ParseZoneContents(content string, zoneName string, zonefileName string) (mo
|
||||||
switch rtype {
|
switch rtype {
|
||||||
case dns.TypeRP:
|
case dns.TypeRP:
|
||||||
name := rr.Header().Name
|
name := rr.Header().Name
|
||||||
name = strings.TrimSuffix(name, ".")
|
|
||||||
prec, err = rtypecontrol.NewRecordConfigFromStruct(name, rr.Header().Ttl, "RP", rr, domaintags.MakeDomainNameVarieties(zoneName))
|
prec, err = rtypecontrol.NewRecordConfigFromStruct(name, rr.Header().Ttl, "RP", rr, domaintags.MakeDomainNameVarieties(zoneName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue