Add support for AAAA records

This commit is contained in:
Björn Busse 2021-05-29 01:47:39 +02:00
parent 56c09edd37
commit 0a22b62ef0
3 changed files with 19 additions and 3 deletions

11
ldap.go
View File

@ -24,13 +24,19 @@ import (
type ldapRecord struct { type ldapRecord struct {
fqdn string fqdn string
ip net.IP ip4 net.IP
ip6 net.IP
} }
func (r *ldapRecord) A() (a *dns.A) { func (r *ldapRecord) A() (a *dns.A) {
return &dns.A{Hdr: dns.RR_Header{Name: r.fqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 0}, A: r.ip} return &dns.A{Hdr: dns.RR_Header{Name: r.fqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 0}, A: r.ip4}
} }
func (r *ldapRecord) AAAA() (a *dns.AAAA) {
return &dns.AAAA{Hdr: dns.RR_Header{Name: r.fqdn, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 86400}, AAAA: r.ip6}
}
// Ldap is an ldap plugin to serve zone entries from a ldap backend. // Ldap is an ldap plugin to serve zone entries from a ldap backend.
type Ldap struct { type Ldap struct {
Next plugin.Handler Next plugin.Handler
@ -43,6 +49,7 @@ type Ldap struct {
SearchRequest *ldap.SearchRequest SearchRequest *ldap.SearchRequest
FqdnAttr string FqdnAttr string
Ip4Attr string Ip4Attr string
Ip6Attr string
ldapURL string ldapURL string
pagingLimit uint32 pagingLimit uint32

View File

@ -150,6 +150,13 @@ func ParseStanza(c *caddy.Controller) (*Ldap, error) {
ldap.SearchRequest.Attributes = append(ldap.SearchRequest.Attributes, c.Val()) ldap.SearchRequest.Attributes = append(ldap.SearchRequest.Attributes, c.Val())
ldap.Ip4Attr = c.Val() // ipHostNumber ldap.Ip4Attr = c.Val() // ipHostNumber
case "ip6":
if !c.NextArg() {
return nil, c.ArgErr()
}
ldap.SearchRequest.Attributes = append(ldap.SearchRequest.Attributes, c.Val())
ldap.Ip6Attr = c.Val() // ipHostNumber
default: default:
return nil, c.Errf("unknown attributes property '%s'", c.Val()) return nil, c.Errf("unknown attributes property '%s'", c.Val())
} }

View File

@ -59,6 +59,7 @@ func (l *Ldap) UpdateZones() error {
} }
for _, lr := range lrpz { for _, lr := range lrpz {
err = zoneFileMap[zn].Insert(lr.AAAA())
err = zoneFileMap[zn].Insert(lr.A()) err = zoneFileMap[zn].Insert(lr.A())
if err != nil { if err != nil {
return fmt.Errorf("updating zones: %w", err) return fmt.Errorf("updating zones: %w", err)
@ -105,7 +106,8 @@ func (l *Ldap) fetchLdapRecords() (ldapRecords []ldapRecord, err error) {
} }
ldapRecords[i] = ldapRecord{ ldapRecords[i] = ldapRecord{
fqdn: fqdn, fqdn: fqdn,
ip: net.ParseIP(searchResult.Entries[i].GetAttributeValue(l.Ip4Attr)), ip4: net.ParseIP(searchResult.Entries[i].GetAttributeValue(l.Ip4Attr)),
ip6: net.ParseIP(searchResult.Entries[i].GetAttributeValue(l.Ip6Attr)),
} }
} }