Include origin in RR generation to extends relatives forms
This commit is contained in:
parent
894f3c1376
commit
8c1170fef4
|
@ -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."),
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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()),
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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{
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user