nsupdate: support multiple ips per network

This commit is contained in:
Joel Elkins 2023-12-27 13:29:39 -06:00
parent 90b4603229
commit 463a4890b5
No known key found for this signature in database
GPG Key ID: 133589DC38921AE2

View File

@ -2,6 +2,7 @@ package container
import (
"fmt"
"net"
"strings"
"time"
@ -194,11 +195,27 @@ func (c *Container) NsUpdateCommands() cmd.Set {
// prepare update commands
cmds := []cmd.Command{}
// TODO: also iterate over c.IPv6Addresses, if it ever works
for i := range c.Networks {
n := &c.Networks[i]
if n.IPv6.Bool && n.IPv6Address != nil && !n.IPv6Address.IsUnspecified() {
f_6 := func() error {
ip6s := []net.IP{}
if n.IPv6Address != nil && !n.IPv6Address.IsUnspecified() {
ip6s = append(ip6s, n.IPv6Address)
}
if n.IPv6Addresses != nil {
ip6s = append(ip6s, n.IPv6Addresses...)
}
f_6 := func() error {
for _, a6 := range ip6s {
if err := c.doDnsReverse(a6.String(), dn, dns.TypeAAAA); err != nil {
return err
}
}
if err := c.killDnsForward(dn, dns.TypeAAAA); err != nil {
return err
}
for _, a6 := range ip6s {
aaaa := dns.AAAA{
Hdr: dns.RR_Header{
Name: dn,
@ -206,24 +223,35 @@ func (c *Container) NsUpdateCommands() cmd.Set {
Class: dns.ClassINET,
Ttl: 7200,
},
AAAA: n.IPv6Address,
}
if err := c.doDnsReverse(aaaa.AAAA.String(), dn, dns.TypeAAAA); err != nil {
return err
}
if err := c.killDnsForward(dn, dns.TypeAAAA); err != nil {
return err
AAAA: a6,
}
if err := c.doDnsForward(aaaa.String()); err != nil {
return err
}
return nil
}
cmds = append(cmds, cmd.NewFunc("nsupate6", f_6))
return nil
}
cmds = append(cmds, cmd.NewFunc("nsupate6", f_6))
ip4s := []net.IP{}
if n.IPv4Address != nil && !n.IPv4Address.IsUnspecified() {
f_4 := func() error {
ip4s = append(ip4s, n.IPv4Address)
}
if n.IPv4Addresses != nil {
ip4s = append(ip4s, n.IPv4Addresses...)
}
f_4 := func() error {
for _, a4 := range ip4s {
if err := c.doDnsReverse(a4.String(), dn, dns.TypeA); err != nil {
return err
}
}
if err := c.killDnsForward(dn, dns.TypeA); err != nil {
return err
}
for _, a4 := range ip4s {
a := dns.A{
Hdr: dns.RR_Header{
Name: dn,
@ -231,22 +259,15 @@ func (c *Container) NsUpdateCommands() cmd.Set {
Class: dns.ClassINET,
Ttl: 7200,
},
A: n.IPv4Address,
}
if err := c.doDnsReverse(a.A.String(), dn, dns.TypeA); err != nil {
return err
}
if err := c.killDnsForward(dn, dns.TypeA); err != nil {
return err
A: a4,
}
if err := c.doDnsForward(a.String()); err != nil {
return err
}
return nil
}
cmds = append(cmds, cmd.NewFunc("nsupate4", f_4))
return nil
}
cmds = append(cmds, cmd.NewFunc("nsupate4", f_4))
}
return c.newCommandSet("NSUPDATE", cmds)
}