Able to generate relative zone

This commit is contained in:
nemunaire 2020-09-30 01:30:53 +02:00
parent 12d9acd368
commit 98ad7c25c2
12 changed files with 50 additions and 23 deletions

View File

@ -37,6 +37,7 @@ import (
"github.com/miekg/dns"
"git.happydns.org/happydns/model"
"git.happydns.org/happydns/utils"
)
type ACMEChallenge struct {
@ -54,7 +55,7 @@ func (s *ACMEChallenge) GenComment(origin string) string {
func (s *ACMEChallenge) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
rrs = append(rrs, &dns.TXT{
Hdr: dns.RR_Header{
Name: "_acme-challenge." + domain,
Name: utils.DomainJoin("_acme-challenge", domain),
Rrtype: dns.TypeTXT,
Class: dns.ClassINET,
Ttl: ttl,

View File

@ -56,7 +56,7 @@ func (s *CNAME) GenComment(origin string) string {
func (s *CNAME) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
rrs = append(rrs, &dns.CNAME{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeCNAME,
Class: dns.ClassINET,
Ttl: ttl,
@ -82,7 +82,7 @@ func (s *SpecialCNAME) GenComment(origin string) string {
func (s *SpecialCNAME) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
rrs = append(rrs, &dns.CNAME{
Hdr: dns.RR_Header{
Name: s.SubDomain + "." + domain,
Name: utils.DomainJoin(s.SubDomain, domain),
Rrtype: dns.TypeCNAME,
Class: dns.ClassINET,
Ttl: ttl,

View File

@ -178,7 +178,7 @@ func (s *EMail) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
for _, mx := range s.MX {
rrs = append(rrs, &dns.MX{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeMX,
Class: dns.ClassINET,
Ttl: ttl,
@ -192,7 +192,7 @@ func (s *EMail) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
if s.SPF != nil {
rrs = append(rrs, &dns.TXT{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeTXT,
Class: dns.ClassINET,
Ttl: ttl,
@ -204,7 +204,7 @@ func (s *EMail) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
for selector, d := range s.DKIM {
rrs = append(rrs, &dns.TXT{
Hdr: dns.RR_Header{
Name: selector + "._domainkey." + domain,
Name: utils.DomainJoin(selector+"._domainkey", domain),
Rrtype: dns.TypeTXT,
Class: dns.ClassINET,
Ttl: ttl,
@ -216,7 +216,7 @@ func (s *EMail) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
if s.DMARC != nil {
rrs = append(rrs, &dns.TXT{
Hdr: dns.RR_Header{
Name: "_dmarc." + domain,
Name: utils.DomainJoin("_dmarc", domain),
Rrtype: dns.TypeTXT,
Class: dns.ClassINET,
Ttl: ttl,
@ -228,7 +228,7 @@ func (s *EMail) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
if s.MTA_STS != nil {
rrs = append(rrs, &dns.TXT{
Hdr: dns.RR_Header{
Name: "_mta-sts." + domain,
Name: utils.DomainJoin("_mta-sts", domain),
Rrtype: dns.TypeTXT,
Class: dns.ClassINET,
Ttl: ttl,
@ -240,7 +240,7 @@ func (s *EMail) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
if s.TLS_RPT != nil {
rrs = append(rrs, &dns.TXT{
Hdr: dns.RR_Header{
Name: "_smtp._tls." + domain,
Name: utils.DomainJoin("_smtp._tls", domain),
Rrtype: dns.TypeTXT,
Class: dns.ClassINET,
Ttl: ttl,

View File

@ -39,6 +39,7 @@ import (
"github.com/miekg/dns"
"git.happydns.org/happydns/model"
"git.happydns.org/happydns/utils"
)
type MatrixIM struct {
@ -90,7 +91,7 @@ destloop:
func (s *MatrixIM) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
for _, matrix := range s.Matrix {
rrs = append(rrs, matrix.GenRRs("_matrix._tcp."+domain, ttl, origin)...)
rrs = append(rrs, matrix.GenRRs(utils.DomainJoin("_matrix._tcp", domain), ttl, origin)...)
}
return
}

View File

@ -41,6 +41,7 @@ import (
"github.com/miekg/dns"
"git.happydns.org/happydns/model"
"git.happydns.org/happydns/utils"
)
type OpenPGP struct {
@ -65,7 +66,7 @@ func (s *OpenPGP) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR
rrs = append(rrs, &dns.OPENPGPKEY{
Hdr: dns.RR_Header{
Name: fmt.Sprintf("%s._openpgpkey.%s", s.Identifier, domain),
Name: utils.DomainJoin(fmt.Sprintf("%s._openpgpkey", s.Identifier), domain),
Rrtype: dns.TypeOPENPGPKEY,
Class: dns.ClassINET,
Ttl: ttl,
@ -101,7 +102,7 @@ func (s *SMimeCert) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.
rrs = append(rrs, &dns.SMIMEA{
Hdr: dns.RR_Header{
Name: fmt.Sprintf("%s._smimecert.%s", s.Identifier, domain),
Name: utils.DomainJoin(fmt.Sprintf("%s._smimecert", s.Identifier), domain),
Rrtype: dns.TypeSMIMEA,
Class: dns.ClassINET,
Ttl: ttl,

View File

@ -69,7 +69,7 @@ func (s *Origin) GenComment(origin string) string {
func (s *Origin) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
rrs = append(rrs, &dns.SOA{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeSOA,
Class: dns.ClassINET,
Ttl: ttl,
@ -85,7 +85,7 @@ func (s *Origin) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
for _, ns := range s.NameServers {
rrs = append(rrs, &dns.NS{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeNS,
Class: dns.ClassINET,
Ttl: ttl,

View File

@ -52,7 +52,7 @@ func (s *Orphan) GenComment(origin string) string {
}
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("$ORIGIN %s\n%s %d IN %s", origin, domain, ttl, s.RR))
if rr != nil {
rrs = append(rrs, rr)
}

View File

@ -39,6 +39,7 @@ import (
"github.com/miekg/dns"
"git.happydns.org/happydns/model"
"git.happydns.org/happydns/utils"
)
type SSHFP struct {
@ -82,7 +83,7 @@ func (s *Server) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
if s.A != nil {
rrs = append(rrs, &dns.A{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeA,
Class: dns.ClassINET,
Ttl: ttl,
@ -93,7 +94,7 @@ func (s *Server) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
if s.AAAA != nil {
rrs = append(rrs, &dns.AAAA{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeAAAA,
Class: dns.ClassINET,
Ttl: ttl,
@ -104,7 +105,7 @@ func (s *Server) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
for _, sshfp := range s.SSHFP {
rrs = append(rrs, &dns.SSHFP{
Hdr: dns.RR_Header{
Name: domain,
Name: utils.DomainJoin(domain),
Rrtype: dns.TypeSSHFP,
Class: dns.ClassINET,
Ttl: ttl,

View File

@ -106,7 +106,7 @@ func (s *UnknownSRV) GenComment(origin string) string {
func (s *UnknownSRV) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
for _, service := range s.SRV {
rrs = append(rrs, service.GenRRs(fmt.Sprintf("_%s._%s.%s", s.Name, s.Proto, domain), ttl, origin)...)
rrs = append(rrs, service.GenRRs(utils.DomainJoin(fmt.Sprintf("_%s._%s", s.Name, s.Proto), domain), ttl, origin)...)
}
return
}

View File

@ -41,6 +41,7 @@ import (
"github.com/miekg/dns"
"git.happydns.org/happydns/model"
"git.happydns.org/happydns/utils"
)
type TLSA struct {
@ -102,7 +103,7 @@ func (ss *TLSAs) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR)
if len(s.Certificate) > 0 {
rrs = append(rrs, &dns.TLSA{
Hdr: dns.RR_Header{
Name: fmt.Sprintf("_%d._%s.%s", s.Port, s.Proto, domain),
Name: utils.DomainJoin(fmt.Sprintf("_%d._%s", s.Port, s.Proto), domain),
Rrtype: dns.TypeTLSA,
Class: dns.ClassINET,
Ttl: ttl,

View File

@ -40,6 +40,7 @@ import (
"github.com/miekg/dns"
"git.happydns.org/happydns/model"
"git.happydns.org/happydns/utils"
)
type XMPP struct {
@ -97,15 +98,15 @@ destloop:
func (s *XMPP) GenRRs(domain string, ttl uint32, origin string) (rrs []dns.RR) {
for _, jabber := range s.Client {
rrs = append(rrs, jabber.GenRRs("_jabber._tcp."+domain, ttl, origin)...)
rrs = append(rrs, jabber.GenRRs(utils.DomainJoin("_jabber._tcp", domain), ttl, origin)...)
}
for _, client := range s.Client {
rrs = append(rrs, client.GenRRs("_xmpp-client._tcp."+domain, ttl, origin)...)
rrs = append(rrs, client.GenRRs(utils.DomainJoin("_xmpp-client._tcp", domain), ttl, origin)...)
}
for _, server := range s.Server {
rrs = append(rrs, server.GenRRs("_xmpp-server._tcp."+domain, ttl, origin)...)
rrs = append(rrs, server.GenRRs(utils.DomainJoin("_xmpp-server._tcp", domain), ttl, origin)...)
}
return

View File

@ -79,3 +79,24 @@ func DomainFQDN(subdomain string, origin string) string {
return subdomain + "." + origin
}
}
// DomainJoin appends each relative domains passed as argument.
func DomainJoin(domains ...string) (ret string) {
for _, d := range domains {
if d == "@" {
break
} else if d != "" {
ret += "." + d
}
if ret[len(ret)-1] == '.' {
break
}
}
if len(ret) >= 1 {
ret = ret[1:]
}
return
}