Able to generate relative zone
This commit is contained in:
parent
12d9acd368
commit
98ad7c25c2
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
21
utils/dns.go
21
utils/dns.go
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user