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 ( import (
"fmt" "fmt"
"net"
"strings" "strings"
"time" "time"
@ -194,11 +195,27 @@ func (c *Container) NsUpdateCommands() cmd.Set {
// prepare update commands // prepare update commands
cmds := []cmd.Command{} cmds := []cmd.Command{}
// TODO: also iterate over c.IPv6Addresses, if it ever works
for i := range c.Networks { for i := range c.Networks {
n := &c.Networks[i] 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{ aaaa := dns.AAAA{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: dn, Name: dn,
@ -206,24 +223,35 @@ func (c *Container) NsUpdateCommands() cmd.Set {
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: 7200, Ttl: 7200,
}, },
AAAA: n.IPv6Address, AAAA: a6,
}
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
} }
if err := c.doDnsForward(aaaa.String()); err != nil { if err := c.doDnsForward(aaaa.String()); err != nil {
return err 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() { 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{ a := dns.A{
Hdr: dns.RR_Header{ Hdr: dns.RR_Header{
Name: dn, Name: dn,
@ -231,22 +259,15 @@ func (c *Container) NsUpdateCommands() cmd.Set {
Class: dns.ClassINET, Class: dns.ClassINET,
Ttl: 7200, Ttl: 7200,
}, },
A: n.IPv4Address, A: a4,
}
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
} }
if err := c.doDnsForward(a.String()); err != nil { if err := c.doDnsForward(a.String()); err != nil {
return err 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) return c.newCommandSet("NSUPDATE", cmds)
} }