From 463a4890b54e328430156a4571ba58fe9ec34b4e Mon Sep 17 00:00:00 2001 From: "Joel D. Elkins" Date: Wed, 27 Dec 2023 13:29:39 -0600 Subject: [PATCH] nsupdate: support multiple ips per network --- internal/pkg/container/nsupdate.go | 69 +++++++++++++++++++----------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/internal/pkg/container/nsupdate.go b/internal/pkg/container/nsupdate.go index 7fc5087..225edcd 100644 --- a/internal/pkg/container/nsupdate.go +++ b/internal/pkg/container/nsupdate.go @@ -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) }