Yet another nsupdate overhaul

cannot seem to figure this out. still not really working right.
This commit is contained in:
Joel Elkins 2024-03-30 23:21:53 -05:00
parent bea6d8f980
commit cbcfeef9e1
No known key found for this signature in database
GPG Key ID: 133589DC38921AE2

View File

@ -52,10 +52,14 @@ func (c *Container) killDnsReverse(ip string) error {
} }
// This is the same code for ipv4 or ipv6 so factor it out // This is the same code for ipv4 or ipv6 so factor it out
func (c *Container) doDnsReverse(ip string, dn string, rrtype uint16) error { func (c *Container) doDnsReverse(ips []net.IP, dn string, rrtype uint16) error {
rv, err := dns.ReverseAddr(ip) rips := make([]string, len(ips))
if err != nil { for i := range ips {
return err rv, err := dns.ReverseAddr(ips[i].String())
if err != nil {
return err
}
rips[i] = rv
} }
cli := c.makeDnsClient() cli := c.makeDnsClient()
@ -84,34 +88,57 @@ func (c *Container) doDnsReverse(ip string, dn string, rrtype uint16) error {
} }
} }
// Determine SOA of reverse zone // map key is SOA
msg = new(dns.Msg) messages := map[string]*dns.Msg{}
msg.SetQuestion(rv, dns.TypeSOA)
resp, _, err = cli.Exchange(msg, c.DnsServer)
if err != nil {
return err
}
soa := resp.Ns[0].Header().Name
// Update the reverse record for i := range rips {
ptr := dns.PTR{ // Determine SOA of reverse zone
Hdr: dns.RR_Header{ msg = new(dns.Msg)
Name: rv, msg.SetQuestion(rips[i], dns.TypeSOA)
Rrtype: dns.TypePTR, resp, _, err = cli.Exchange(msg, c.DnsServer)
Class: dns.ClassINET, if err != nil {
Ttl: 7200, return err
}, }
Ptr: dn, soa := resp.Ns[0].Header().Name
if messages[soa] == nil {
msg := new(dns.Msg)
msg.SetUpdate(soa)
messages[soa] = msg
}
// Update the reverse record
ptr := dns.PTR{
Hdr: dns.RR_Header{
Name: rips[i],
Rrtype: dns.TypePTR,
Class: dns.ClassINET,
Ttl: 7200,
},
Ptr: dn,
}
messages[soa].Ns = append(messages[soa].Ns, &ptr)
} }
msg = new(dns.Msg) // execute the messages
msg.SetUpdate(soa) errs := make([]error, len(messages))
msg.Ns = append(msg.Ns, &ptr) j := 0
if c.TSIGName != "" { for _, msg := range messages {
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix()) if c.TSIGName != "" {
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix())
}
_, _, errs[j] = cli.Exchange(msg, c.DnsServer)
j += 1
} }
_, _, err = cli.Exchange(msg, c.DnsServer)
return err // check for errors
for _, err := range errs {
if err != nil {
return err
}
}
return nil
} }
func (c *Container) killDnsForward(name string, rrtype uint16) error { func (c *Container) killDnsForward(name string, rrtype uint16) error {
@ -219,18 +246,13 @@ func (c *Container) NsUpdateCommands() cmd.Set {
} }
// make reverse commands // make reverse commands
for _, i := range ip6s { rdns := func() error {
f_6 := func() error { if err := c.doDnsReverse(ip6s, dn, dns.TypeAAAA); err != nil {
return c.doDnsReverse(i.String(), dn, dns.TypeAAAA) return err
} }
cmds = append(cmds, cmd.NewFunc("reverse_dns_6"+i.String(), f_6)) return c.doDnsReverse(ip4s, dn, dns.TypeA)
}
for _, i := range ip4s {
f_4 := func() error {
return c.doDnsReverse(i.String(), dn, dns.TypeAAAA)
}
cmds = append(cmds, cmd.NewFunc("reverse_dns_4"+i.String(), f_4))
} }
cmds = append(cmds, cmd.NewFunc("reverse_dns", rdns))
// make foreard commands // make foreard commands
rrs := []string{} rrs := []string{}