Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions build/generate/featureMatrix.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ func matrixData() *FeatureMatrix {
DomainModifierSshfp = "[`SSHFP`](functions/domain/SSHFP.md)"
DomainModifierTlsa = "[`TLSA`](functions/domain/TLSA.md)"
DomainModifierDs = "[`DS`](functions/domain/DS.md)"
DomainModifierDhcid = "[`DHCID`](functions/domain/DHCID.md)"
DualHost = "dual host"
CreateDomains = "create-domains"
NoPurge = "[`NO_PURGE`](functions/domain/NO_PURGE.md)"
Expand All @@ -110,6 +111,7 @@ func matrixData() *FeatureMatrix {
DomainModifierSshfp,
DomainModifierTlsa,
DomainModifierDs,
DomainModifierDhcid,
DualHost,
CreateDomains,
NoPurge,
Expand Down Expand Up @@ -180,6 +182,10 @@ func matrixData() *FeatureMatrix {
DomainModifierCaa,
providers.CanUseCAA,
)
setCapability(
DomainModifierDhcid,
providers.CanUseDHCID,
)
setCapability(
DomainModifierDs,
providers.CanUseDS,
Expand Down
9 changes: 9 additions & 0 deletions integrationTest/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,10 @@ func cname(name, target string) *models.RecordConfig {
return makeRec(name, target, "CNAME")
}

func dhcid(name, target string) *models.RecordConfig {
return makeRec(name, target, "DHCID")
}

func ds(name string, keyTag uint16, algorithm, digestType uint8, digest string) *models.RecordConfig {
r := makeRec(name, "", "DS")
r.SetTargetDS(keyTag, algorithm, digestType, digest)
Expand Down Expand Up @@ -1554,6 +1558,11 @@ func makeTests(t *testing.T) []*TestGroup {
// ns("another-child", "ns101.cloudns.net."),
//),
),
testgroup("PTR",
requires(providers.CanUsePTR),
tc("Create DHCPID record", dhcid("test", "AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA=")),
tc("Modify DHCPID record", dhcid("test", "Test/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA=")),
),

//// Vendor-specific record types

Expand Down
2 changes: 2 additions & 0 deletions models/dnsrr.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ func RRtoRC(rr dns.RR, origin string) (RecordConfig, error) {
err = rc.SetTargetCAA(v.Flag, v.Tag, v.Value)
case *dns.CNAME:
err = rc.SetTarget(v.Target)
case *dns.DHCID:
err = rc.SetTarget(v.Digest)
case *dns.DS:
err = rc.SetTargetDS(v.KeyTag, v.Algorithm, v.DigestType, v.Digest)
case *dns.LOC:
Expand Down
2 changes: 1 addition & 1 deletion models/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ func (dc *DomainConfig) Punycode() error {
rec.SetTarget(t)
case "CF_REDIRECT", "CF_TEMP_REDIRECT", "CF_WORKER_ROUTE":
rec.SetTarget(rec.GetTargetField())
case "A", "AAAA", "CAA", "DS", "LOC", "NAPTR", "SOA", "SSHFP", "TXT", "TLSA", "AZURE_ALIAS":
case "A", "AAAA", "CAA", "DHCPID", "DS", "LOC", "NAPTR", "SOA", "SSHFP", "TXT", "TLSA", "AZURE_ALIAS":
// Nothing to do.
default:
return fmt.Errorf("Punycode rtype %v unimplemented", rec.Type)
Expand Down
6 changes: 4 additions & 2 deletions models/record.go
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,8 @@ func (rc *RecordConfig) ToRR() dns.RR {
rr.(*dns.CAA).Value = rc.GetTargetField()
case dns.TypeCNAME:
rr.(*dns.CNAME).Target = rc.GetTargetField()
case dns.TypeDHCID:
rr.(*dns.DHCID).Digest = rc.GetTargetField()
case dns.TypeDS:
rr.(*dns.DS).Algorithm = rc.DsAlgorithm
rr.(*dns.DS).DigestType = rc.DsDigestType
Expand Down Expand Up @@ -593,7 +595,7 @@ func Downcase(recs []*RecordConfig) {
// Target is case insensitive. Downcase it.
r.target = strings.ToLower(r.target)
// BUGFIX(tlim): isn't ALIAS in the wrong case statement?
case "A", "ALIAS", "CAA", "CF_REDIRECT", "CF_TEMP_REDIRECT", "CF_WORKER_ROUTE", "IMPORT_TRANSFORM", "LOC", "SSHFP", "TXT":
case "A", "ALIAS", "CAA", "CF_REDIRECT", "CF_TEMP_REDIRECT", "CF_WORKER_ROUTE", "DHCID", "IMPORT_TRANSFORM", "LOC", "SSHFP", "TXT":
// Do nothing. (IP address or case sensitive target)
case "SOA":
if r.target != "DEFAULT_NOT_SET." {
Expand All @@ -617,7 +619,7 @@ func CanonicalizeTargets(recs []*RecordConfig, origin string) {
case "AKAMAICDN", "ANAME", "CNAME", "DS", "MX", "NS", "NAPTR", "PTR", "SRV":
// Target is a hostname that might be a shortname. Turn it into a FQDN.
r.target = dnsutil.AddOrigin(r.target, originFQDN)
case "A", "ALIAS", "CAA", "CF_REDIRECT", "CF_TEMP_REDIRECT", "CF_WORKER_ROUTE", "IMPORT_TRANSFORM", "LOC", "SSHFP", "TLSA", "TXT":
case "A", "ALIAS", "CAA", "DHCID", "CF_REDIRECT", "CF_TEMP_REDIRECT", "CF_WORKER_ROUTE", "IMPORT_TRANSFORM", "LOC", "SSHFP", "TLSA", "TXT":
// Do nothing.
case "SOA":
if r.target != "DEFAULT_NOT_SET." {
Expand Down
2 changes: 2 additions & 0 deletions models/t_parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ func (rc *RecordConfig) PopulateFromString(rtype, contents, origin string) error
return rc.SetTargetCAAString(contents)
case "DS":
return rc.SetTargetDSString(contents)
case "DHCID":
return rc.SetTarget(contents)
case "LOC":
return rc.SetTargetLOCString(origin, contents)
case "MX":
Expand Down
3 changes: 3 additions & 0 deletions pkg/js/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,9 @@ var DS = recordBuilder('DS', {
},
});

// DHCID(name,target, recordModifiers...)
var DHCID = recordBuilder('DHCID');

// PTR(name,target, recordModifiers...)
var PTR = recordBuilder('PTR');

Expand Down
3 changes: 3 additions & 0 deletions pkg/js/parse_tests/046-DHCID.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
D("foo.com","none",
DHCID("@", "Test")
);
18 changes: 18 additions & 0 deletions pkg/js/parse_tests/046-DHCID.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"registrars": [],
"dns_providers": [],
"domains": [
{
"name": "foo.com",
"registrar": "none",
"dnsProviders": {},
"records": [
{
"type": "DHCID",
"name": "@",
"target": "Test"
}
]
}
]
}
4 changes: 3 additions & 1 deletion pkg/normalize/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ func validateRecordTypes(rec *models.RecordConfig, domain string, pTypes []strin
"ALIAS": false,
"CAA": true,
"CNAME": true,
"DHCID": true,
"DS": true,
"IMPORT_TRANSFORM": false,
"LOC": true,
Expand Down Expand Up @@ -221,7 +222,7 @@ func checkTargets(rec *models.RecordConfig, domain string) (errs []error) {
}
case "SRV":
check(checkTarget(target))
case "TXT", "IMPORT_TRANSFORM", "CAA", "SSHFP", "TLSA", "DS":
case "CAA", "DHCID", "DS", "IMPORT_TRANSFORM", "SSHFP", "TLSA", "TXT":
default:
if rec.Metadata["orig_custom_type"] != "" {
// it is a valid custom type. We perform no validation on target
Expand Down Expand Up @@ -688,6 +689,7 @@ var providerCapabilityChecks = []pairTypeCapability{
capabilityCheck("AUTODNSSEC", providers.CanAutoDNSSEC),
capabilityCheck("AZURE_ALIAS", providers.CanUseAzureAlias),
capabilityCheck("CAA", providers.CanUseCAA),
capabilityCheck("DHCID", providers.CanUseDHCID),
capabilityCheck("LOC", providers.CanUseLOC),
capabilityCheck("NAPTR", providers.CanUseNAPTR),
capabilityCheck("PTR", providers.CanUsePTR),
Expand Down
2 changes: 2 additions & 0 deletions pkg/prettyzone/prettyzone_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ func TestWriteZoneFileEach(t *testing.T) {
d = append(d, mustNewRR(`_443._tcp.bosun.org. 300 IN TLSA 3 1 1 abcdef0`)) // Label must be _port._proto
d = append(d, mustNewRR(`sub.bosun.org. 300 IN NS bosun.org.`)) // Must be a label with no other records.
d = append(d, mustNewRR(`x.bosun.org. 300 IN CNAME bosun.org.`)) // Must be a label with no other records.
d = append(d, mustNewRR(`bosun.org. 300 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA=`))
buf := &bytes.Buffer{}
WriteZoneFileRR(buf, d, "bosun.org")
if buf.String() != testdataZFEach {
Expand All @@ -289,6 +290,7 @@ var testdataZFEach = `$TTL 300
IN SRV 10 10 9999 foo.com.
IN TXT "my text"
IN CAA 0 issue "letsencrypt.org"
IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA=
4.5 IN PTR y.bosun.org.
_443._tcp IN TLSA 3 1 1 abcdef0
sub IN NS bosun.org.
Expand Down
1 change: 1 addition & 0 deletions providers/axfrddns/axfrddnsProvider.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ var features = providers.DocumentationNotes{
providers.CanUseSRV: providers.Can(),
providers.CanUseSSHFP: providers.Can(),
providers.CanUseTLSA: providers.Can(),
providers.CanUseDHCID: providers.Can(),
providers.CantUseNOPURGE: providers.Cannot(),
providers.DocCreateDomains: providers.Cannot(),
providers.DocDualHost: providers.Cannot(),
Expand Down
1 change: 1 addition & 0 deletions providers/bind/bindProvider.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ var features = providers.DocumentationNotes{
providers.CanAutoDNSSEC: providers.Can("Just writes out a comment indicating DNSSEC was requested"),
providers.CanGetZones: providers.Can(),
providers.CanUseCAA: providers.Can(),
providers.CanUseDHCID: providers.Can(),
providers.CanUseDS: providers.Can(),
providers.CanUseLOC: providers.Can(),
providers.CanUseNAPTR: providers.Can(),
Expand Down
3 changes: 3 additions & 0 deletions providers/capabilities.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ const (
// CanUseCAA indicates the provider can handle CAA records
CanUseCAA

// CanUseDHCID indicates the provider can handle DHCID records
CanUseDHCID

// CanUseDS indicates that the provider can handle DS record types. This
// implies CanUseDSForChildren without specifying the latter explicitly.
CanUseDS
Expand Down
33 changes: 17 additions & 16 deletions providers/capability_string.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.