plugin/etcd: small refactor (#1749)
* plugin/etcd: small refactor I think this function can be smaller. * and make it compile
This commit is contained in:
parent
82d3195f2f
commit
c0590e4ec4
1 changed files with 20 additions and 31 deletions
|
@ -14,7 +14,7 @@ import (
|
||||||
|
|
||||||
// A returns A records from Backend or an error.
|
// A returns A records from Backend or an error.
|
||||||
func A(b ServiceBackend, zone string, state request.Request, previousRecords []dns.RR, opt Options) (records []dns.RR, err error) {
|
func A(b ServiceBackend, zone string, state request.Request, previousRecords []dns.RR, opt Options) (records []dns.RR, err error) {
|
||||||
services, err := checkZoneForRecord(b, zone, state, opt)
|
services, err := checkForApex(b, zone, state, opt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ func A(b ServiceBackend, zone string, state request.Request, previousRecords []d
|
||||||
|
|
||||||
// AAAA returns AAAA records from Backend or an error.
|
// AAAA returns AAAA records from Backend or an error.
|
||||||
func AAAA(b ServiceBackend, zone string, state request.Request, previousRecords []dns.RR, opt Options) (records []dns.RR, err error) {
|
func AAAA(b ServiceBackend, zone string, state request.Request, previousRecords []dns.RR, opt Options) (records []dns.RR, err error) {
|
||||||
services, err := checkZoneForRecord(b, zone, state, opt)
|
services, err := checkForApex(b, zone, state, opt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -403,37 +403,26 @@ func newAddress(s msg.Service, name string, ip net.IP, what uint16) dns.RR {
|
||||||
return &dns.AAAA{Hdr: hdr, AAAA: ip}
|
return &dns.AAAA{Hdr: hdr, AAAA: ip}
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkZoneForRecord(b ServiceBackend, zone string, state request.Request, opt Options) ([]msg.Service, error) {
|
// checkForApex checks the spcecial apex.dns directory for records that will be returned as A or AAAA.
|
||||||
var services []msg.Service
|
func checkForApex(b ServiceBackend, zone string, state request.Request, opt Options) ([]msg.Service, error) {
|
||||||
var err error
|
if state.Name() != zone {
|
||||||
// if the zone name itself is queried we fake the query to search for a special entry
|
return b.Services(state, false, opt)
|
||||||
// this is equivalent to the NS search code
|
|
||||||
if state.Name() == zone {
|
|
||||||
old := state.QName()
|
|
||||||
state.Clear()
|
|
||||||
state.Req.Question[0].Name = dnsutil.Join([]string{"apex.dns", zone})
|
|
||||||
|
|
||||||
services, err = b.Services(state, false, opt)
|
|
||||||
if err != nil {
|
|
||||||
// it might be possible, that "apex.dns.zone" does not exists
|
|
||||||
// we set back the query and try it once again to restore the backward compatibility behavior
|
|
||||||
state.Req.Question[0].Name = old
|
|
||||||
services, err = b.Services(state, false, opt)
|
|
||||||
// if it still errors, we return the error
|
|
||||||
if err != nil {
|
|
||||||
return services, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
state.Req.Question[0].Name = old
|
|
||||||
} else {
|
|
||||||
services, err = b.Services(state, false, opt)
|
|
||||||
if err != nil {
|
|
||||||
return services, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return services, err
|
// If the zone name itself is queried we fake the query to search for a special entry
|
||||||
|
// this is equivalent to the NS search code.
|
||||||
|
old := state.QName()
|
||||||
|
state.Clear()
|
||||||
|
state.Req.Question[0].Name = dnsutil.Join([]string{"apex.dns", zone})
|
||||||
|
|
||||||
|
services, err := b.Services(state, false, opt)
|
||||||
|
if err == nil {
|
||||||
|
state.Req.Question[0].Name = old
|
||||||
|
return services, err
|
||||||
|
}
|
||||||
|
|
||||||
|
state.Req.Question[0].Name = old
|
||||||
|
return b.Services(state, false, opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
const hostmaster = "hostmaster"
|
const hostmaster = "hostmaster"
|
||||||
|
|
Loading…
Add table
Reference in a new issue