diff --git a/bind.go b/bind.go index 0c897bc..6493957 100644 --- a/bind.go +++ b/bind.go @@ -126,6 +126,11 @@ func ConvertBindToRR(record dns.RR) *route53.ResourceRecord { return &route53.ResourceRecord{ Value: aws.String(value), } + case *dns.DS: + value := fmt.Sprintf("%d %d %d %s", record.KeyTag, record.Algorithm, record.DigestType, record.Digest) + return &route53.ResourceRecord{ + Value: aws.String(value), + } default: errorAndExit(fmt.Sprintf("Unsupported resource record: %s", record)) } @@ -454,6 +459,28 @@ func ConvertRRSetToBind(rrset *route53.ResourceRecordSet) []dns.RR { } ret = append(ret, dnsrr) } + case "DS": + for _, rr := range rrset.ResourceRecords { + var keyTag uint16 + var algorithm uint8 + var digestType uint8 + var digest string + fmt.Sscanf(*rr.Value, "%d %d %d %s", &keyTag, &algorithm, &digestType, &digest) + + dnsrr := &dns.DS{ + Hdr: dns.RR_Header{ + Name: name, + Rrtype: dns.TypeDS, + Class: dns.ClassINET, + Ttl: uint32(*rrset.TTL), + }, + KeyTag: keyTag, + Algorithm: algorithm, + DigestType: digestType, + Digest: digest, + } + ret = append(ret, dnsrr) + } } } diff --git a/bind_test.go b/bind_test.go index 9b1d1f5..0901d34 100644 --- a/bind_test.go +++ b/bind_test.go @@ -291,6 +291,32 @@ var testConvertRRSetToBindTable = []struct { }, }, }, + { + Input: route53.ResourceRecordSet{ + Type: aws.String("DS"), + Name: aws.String("example.com."), + ResourceRecords: []*route53.ResourceRecord{ + { + Value: aws.String("123 4 5 1234567890ABCDEF1234567890ABCDEF"), + }, + }, + TTL: aws.Int64(86400), + }, + Output: []dns.RR{ + &dns.DS{ + Hdr: dns.RR_Header{ + Name: "example.com.", + Rrtype: dns.TypeDS, + Class: dns.ClassINET, + Ttl: uint32(86400), + }, + KeyTag: 123, + Algorithm: 4, + DigestType: 5, + Digest: "1234567890ABCDEF1234567890ABCDEF", + }, + }, + }, { Input: route53.ResourceRecordSet{ Type: aws.String("NAPTR"),