Include origin in RR generation to extends relatives forms

This commit is contained in:
nemunaire 2020-06-27 15:14:14 +02:00
parent 894f3c1376
commit 8c1170fef4
13 changed files with 58 additions and 30 deletions

View File

@ -130,7 +130,7 @@ func addZoneService(opts *config.Options, domain *happydns.Domain, zone *happydn
subdomain := strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(ps.ByName("subdomain"), "."+domain.DomainName), "@"), domain.DomainName) subdomain := strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(ps.ByName("subdomain"), "."+domain.DomainName), "@"), domain.DomainName)
records := usc.Service.GenRRs(subdomain, usc.Ttl) records := usc.Service.GenRRs(subdomain, usc.Ttl, domain.DomainName)
if len(records) == 0 { if len(records) == 0 {
return APIErrorResponse{ return APIErrorResponse{
err: fmt.Errorf("No record can be generated from your service."), err: fmt.Errorf("No record can be generated from your service."),

View File

@ -40,7 +40,7 @@ type Service interface {
GetNbResources() int GetNbResources() int
GenComment(origin string) string GenComment(origin string) string
// genRRs generates corresponding RRs. // genRRs generates corresponding RRs.
GenRRs(domain string, ttl uint32) []dns.RR GenRRs(domain string, ttl uint32, origin string) []dns.RR
} }
type ServiceType struct { type ServiceType struct {

View File

@ -130,7 +130,7 @@ func (z *Zone) GenerateRRs(origin string) (rrs []dns.RR) {
} else { } else {
ttl = svc.Ttl ttl = svc.Ttl
} }
rrs = append(rrs, svc.GenRRs(subdomain, ttl)...) rrs = append(rrs, svc.GenRRs(subdomain, ttl, origin)...)
} }
} }

View File

@ -52,7 +52,12 @@ func (s *CNAME) GenComment(origin string) string {
return strings.TrimSuffix(s.Target, "."+origin) return strings.TrimSuffix(s.Target, "."+origin)
} }
func (s *CNAME) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *CNAME) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
target := s.Target
if target[len(target)-1] != '.' {
target += origin
}
rrs = append(rrs, &dns.CNAME{ rrs = append(rrs, &dns.CNAME{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: domain, Name: domain,
@ -60,7 +65,7 @@ func (s *CNAME) GenRRs(domain string, ttl uint32) (rrs []dns.RR) {
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: ttl, Ttl: ttl,
}, },
Target: s.Target, Target: target,
}) })
return return
} }
@ -78,7 +83,12 @@ func (s *SpecialCNAME) GenComment(origin string) string {
return "(" + s.SubDomain + ") -> " + strings.TrimSuffix(s.Target, "."+origin) return "(" + s.SubDomain + ") -> " + strings.TrimSuffix(s.Target, "."+origin)
} }
func (s *SpecialCNAME) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *SpecialCNAME) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
target := s.Target
if target[len(target)-1] != '.' {
target += origin
}
rrs = append(rrs, &dns.CNAME{ rrs = append(rrs, &dns.CNAME{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: s.SubDomain + "." + domain, Name: s.SubDomain + "." + domain,
@ -86,7 +96,7 @@ func (s *SpecialCNAME) GenRRs(domain string, ttl uint32) (rrs []dns.RR) {
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: ttl, Ttl: ttl,
}, },
Target: s.Target, Target: target,
}) })
return return
} }

View File

@ -173,9 +173,14 @@ func (s *EMail) GenComment(origin string) string {
return buffer.String() return buffer.String()
} }
func (s *EMail) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *EMail) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
if len(s.MX) > 0 { if len(s.MX) > 0 {
for _, mx := range s.MX { for _, mx := range s.MX {
target := mx.Target
if target[len(target)-1] != '.' {
target += origin
}
rrs = append(rrs, &dns.MX{ rrs = append(rrs, &dns.MX{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: domain, Name: domain,
@ -183,7 +188,7 @@ func (s *EMail) GenRRs(domain string, ttl uint32) (rrs []dns.RR) {
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: ttl, Ttl: ttl,
}, },
Mx: mx.Target, Mx: target,
Preference: mx.Preference, Preference: mx.Preference,
}) })
} }

View File

@ -88,9 +88,9 @@ destloop:
return buffer.String() return buffer.String()
} }
func (s *MatrixIM) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *MatrixIM) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
for _, matrix := range s.Matrix { for _, matrix := range s.Matrix {
rrs = append(rrs, matrix.GenRRs("_matrix._tcp."+domain, ttl)...) rrs = append(rrs, matrix.GenRRs("_matrix._tcp."+domain, ttl, origin)...)
} }
return return
} }

View File

@ -57,7 +57,7 @@ func (s *OpenPGP) GenComment(origin string) string {
return fmt.Sprintf("%s", s.Username) return fmt.Sprintf("%s", s.Username)
} }
func (s *OpenPGP) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *OpenPGP) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
if len(s.PublicKey) > 0 { if len(s.PublicKey) > 0 {
if s.Username != "" { if s.Username != "" {
s.Identifier = fmt.Sprintf("%x", sha256.Sum224([]byte(s.Username))) s.Identifier = fmt.Sprintf("%x", sha256.Sum224([]byte(s.Username)))
@ -65,7 +65,7 @@ func (s *OpenPGP) GenRRs(domain string, ttl uint32) (rrs []dns.RR) {
rrs = append(rrs, &dns.OPENPGPKEY{ rrs = append(rrs, &dns.OPENPGPKEY{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: fmt.Sprintf("_%s._openpgpkey.%d", s.Identifier, domain), Name: fmt.Sprintf("_%s._openpgpkey.%s", s.Identifier, domain),
Rrtype: dns.TypeOPENPGPKEY, Rrtype: dns.TypeOPENPGPKEY,
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: ttl, Ttl: ttl,
@ -93,7 +93,7 @@ func (s *SMimeCert) GenComment(origin string) string {
return fmt.Sprintf("%s", s.Username) return fmt.Sprintf("%s", s.Username)
} }
func (s *SMimeCert) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *SMimeCert) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
if len(s.Certificate) > 0 { if len(s.Certificate) > 0 {
if s.Username != "" { if s.Username != "" {
s.Identifier = fmt.Sprintf("%x", sha256.Sum224([]byte(s.Username))) s.Identifier = fmt.Sprintf("%x", sha256.Sum224([]byte(s.Username)))
@ -101,7 +101,7 @@ func (s *SMimeCert) GenRRs(domain string, ttl uint32) (rrs []dns.RR) {
rrs = append(rrs, &dns.SMIMEA{ rrs = append(rrs, &dns.SMIMEA{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: fmt.Sprintf("_%s._smimecert.%d", s.Identifier, domain), Name: fmt.Sprintf("_%s._smimecert.%s", s.Identifier, domain),
Rrtype: dns.TypeSMIMEA, Rrtype: dns.TypeSMIMEA,
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: ttl, Ttl: ttl,

View File

@ -59,7 +59,15 @@ func (s *Origin) GenComment(origin string) string {
return fmt.Sprintf("%s %s %d", strings.TrimSuffix(s.Ns, "."+origin), strings.TrimSuffix(s.Mbox, "."+origin), s.Serial) return fmt.Sprintf("%s %s %d", strings.TrimSuffix(s.Ns, "."+origin), strings.TrimSuffix(s.Mbox, "."+origin), s.Serial)
} }
func (s *Origin) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *Origin) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
ns := s.Ns
if ns[len(ns)-1] != '.' {
ns += origin
}
mbox := s.Mbox
if mbox[len(mbox)-1] != '.' {
mbox += origin
}
rrs = append(rrs, &dns.SOA{ rrs = append(rrs, &dns.SOA{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: domain, Name: domain,
@ -67,8 +75,8 @@ func (s *Origin) GenRRs(domain string, ttl uint32) (rrs []dns.RR) {
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: ttl, Ttl: ttl,
}, },
Ns: s.Ns, Ns: ns,
Mbox: s.Mbox, Mbox: mbox,
Serial: s.Serial, Serial: s.Serial,
Refresh: uint32(s.Refresh.Seconds()), Refresh: uint32(s.Refresh.Seconds()),
Retry: uint32(s.Retry.Seconds()), Retry: uint32(s.Retry.Seconds()),

View File

@ -51,7 +51,7 @@ func (s *Orphan) GenComment(origin string) string {
return s.RR return s.RR
} }
func (s *Orphan) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *Orphan) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
rr, _ := dns.NewRR(fmt.Sprintf("%s %d IN %s", domain, ttl, s.RR)) rr, _ := dns.NewRR(fmt.Sprintf("%s %d IN %s", domain, ttl, s.RR))
if rr != nil { if rr != nil {
rrs = append(rrs, rr) rrs = append(rrs, rr)

View File

@ -78,7 +78,7 @@ func (s *Server) GenComment(origin string) string {
return buffer.String() return buffer.String()
} }
func (s *Server) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *Server) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
if s.A != nil { if s.A != nil {
rrs = append(rrs, &dns.A{ rrs = append(rrs, &dns.A{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{

View File

@ -56,7 +56,12 @@ func (s *SRV) GenComment(origin string) string {
return fmt.Sprintf("%s:%d", strings.TrimSuffix(s.Target, "."+origin), s.Port) return fmt.Sprintf("%s:%d", strings.TrimSuffix(s.Target, "."+origin), s.Port)
} }
func (s *SRV) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *SRV) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
target := s.Target
if target[len(target)-1] != '.' {
target += origin
}
rrs = append(rrs, &dns.SRV{ rrs = append(rrs, &dns.SRV{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: domain, Name: domain,
@ -67,7 +72,7 @@ func (s *SRV) GenRRs(domain string, ttl uint32) (rrs []dns.RR) {
Priority: s.Priority, Priority: s.Priority,
Weight: s.Weight, Weight: s.Weight,
Port: s.Port, Port: s.Port,
Target: s.Target, Target: target,
}) })
return return
} }
@ -103,9 +108,9 @@ func (s *UnknownSRV) GenComment(origin string) string {
return fmt.Sprintf("%s (%s)", s.Name, s.Proto) return fmt.Sprintf("%s (%s)", s.Name, s.Proto)
} }
func (s *UnknownSRV) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *UnknownSRV) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
for _, service := range s.SRV { for _, service := range s.SRV {
rrs = append(rrs, service.GenRRs(fmt.Sprintf("_%s._%s.%s", s.Name, s.Proto, domain), ttl)...) rrs = append(rrs, service.GenRRs(fmt.Sprintf("_%s._%s.%s", s.Name, s.Proto, domain), ttl, origin)...)
} }
return return
} }

View File

@ -97,12 +97,12 @@ protoloop:
return buffer.String() return buffer.String()
} }
func (ss *TLSAs) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (ss *TLSAs) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
for _, s := range ss.TLSA { for _, s := range ss.TLSA {
if len(s.Certificate) > 0 { if len(s.Certificate) > 0 {
rrs = append(rrs, &dns.TLSA{ rrs = append(rrs, &dns.TLSA{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: fmt.Sprintf("_%d._%s.%d", s.Port, s.Proto, domain), Name: fmt.Sprintf("_%d._%s.%s", s.Port, s.Proto, domain),
Rrtype: dns.TypeTLSA, Rrtype: dns.TypeTLSA,
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: ttl, Ttl: ttl,

View File

@ -95,17 +95,17 @@ destloop:
return buffer.String() return buffer.String()
} }
func (s *XMPP) GenRRs(domain string, ttl uint32) (rrs []dns.RR) { func (s *XMPP) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
for _, jabber := range s.Client { for _, jabber := range s.Client {
rrs = append(rrs, jabber.GenRRs("_jabber._tcp."+domain, ttl)...) rrs = append(rrs, jabber.GenRRs("_jabber._tcp."+domain, ttl, origin)...)
} }
for _, client := range s.Client { for _, client := range s.Client {
rrs = append(rrs, client.GenRRs("_xmpp-client._tcp."+domain, ttl)...) rrs = append(rrs, client.GenRRs("_xmpp-client._tcp."+domain, ttl, origin)...)
} }
for _, server := range s.Server { for _, server := range s.Server {
rrs = append(rrs, server.GenRRs("_xmpp-server._tcp."+domain, ttl)...) rrs = append(rrs, server.GenRRs("_xmpp-server._tcp."+domain, ttl, origin)...)
} }
return return