From 4e2e46014d098d9827605cb78149356fed05fb29 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sun, 23 Apr 2023 11:43:50 +0000 Subject: [PATCH] chore(settings): `inet.af/netaddr` -> `net/netip` --- .../configuration/settings/dnsblacklist.go | 22 ++++++------ .../configuration/settings/helpers/copy.go | 33 ++++++++--------- .../configuration/settings/helpers/merge.go | 10 +++--- .../settings/helpers/override.go | 10 +++--- internal/configuration/settings/netaddr.go | 36 +++++++++++++++++++ internal/configuration/settings/unbound.go | 18 +++++----- .../configuration/settings/unbound_test.go | 8 ++--- .../configuration/sources/env/dnsblacklist.go | 14 ++++---- 8 files changed, 92 insertions(+), 59 deletions(-) create mode 100644 internal/configuration/settings/netaddr.go diff --git a/internal/configuration/settings/dnsblacklist.go b/internal/configuration/settings/dnsblacklist.go index 7a892a5e..13bb8448 100644 --- a/internal/configuration/settings/dnsblacklist.go +++ b/internal/configuration/settings/dnsblacklist.go @@ -3,12 +3,12 @@ package settings import ( "errors" "fmt" + "net/netip" "regexp" "github.com/qdm12/dns/pkg/blacklist" "github.com/qdm12/gluetun/internal/configuration/settings/helpers" "github.com/qdm12/gotree" - "inet.af/netaddr" ) // DNSBlacklist is settings for the DNS blacklist building. @@ -18,8 +18,8 @@ type DNSBlacklist struct { BlockSurveillance *bool AllowedHosts []string AddBlockedHosts []string - AddBlockedIPs []netaddr.IP - AddBlockedIPPrefixes []netaddr.IPPrefix + AddBlockedIPs []netip.Addr + AddBlockedIPPrefixes []netip.Prefix } func (b *DNSBlacklist) setDefaults() { @@ -58,8 +58,8 @@ func (b DNSBlacklist) copy() (copied DNSBlacklist) { BlockSurveillance: helpers.CopyBoolPtr(b.BlockSurveillance), AllowedHosts: helpers.CopyStringSlice(b.AllowedHosts), AddBlockedHosts: helpers.CopyStringSlice(b.AddBlockedHosts), - AddBlockedIPs: helpers.CopyNetaddrIPsSlice(b.AddBlockedIPs), - AddBlockedIPPrefixes: helpers.CopyIPPrefixSlice(b.AddBlockedIPPrefixes), + AddBlockedIPs: helpers.CopyNetipAddressesSlice(b.AddBlockedIPs), + AddBlockedIPPrefixes: helpers.CopyNetipPrefixesSlice(b.AddBlockedIPPrefixes), } } @@ -69,8 +69,8 @@ func (b *DNSBlacklist) mergeWith(other DNSBlacklist) { b.BlockSurveillance = helpers.MergeWithBool(b.BlockSurveillance, other.BlockSurveillance) b.AllowedHosts = helpers.MergeStringSlices(b.AllowedHosts, other.AllowedHosts) b.AddBlockedHosts = helpers.MergeStringSlices(b.AddBlockedHosts, other.AddBlockedHosts) - b.AddBlockedIPs = helpers.MergeNetaddrIPsSlices(b.AddBlockedIPs, other.AddBlockedIPs) - b.AddBlockedIPPrefixes = helpers.MergeIPPrefixesSlices(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes) + b.AddBlockedIPs = helpers.MergeNetipAddressesSlices(b.AddBlockedIPs, other.AddBlockedIPs) + b.AddBlockedIPPrefixes = helpers.MergeNetipPrefixesSlices(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes) } func (b *DNSBlacklist) overrideWith(other DNSBlacklist) { @@ -79,8 +79,8 @@ func (b *DNSBlacklist) overrideWith(other DNSBlacklist) { b.BlockSurveillance = helpers.OverrideWithBool(b.BlockSurveillance, other.BlockSurveillance) b.AllowedHosts = helpers.OverrideWithStringSlice(b.AllowedHosts, other.AllowedHosts) b.AddBlockedHosts = helpers.OverrideWithStringSlice(b.AddBlockedHosts, other.AddBlockedHosts) - b.AddBlockedIPs = helpers.OverrideWithNetaddrIPsSlice(b.AddBlockedIPs, other.AddBlockedIPs) - b.AddBlockedIPPrefixes = helpers.OverrideWithIPPrefixesSlice(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes) + b.AddBlockedIPs = helpers.OverrideWithNetipAddressesSlice(b.AddBlockedIPs, other.AddBlockedIPs) + b.AddBlockedIPPrefixes = helpers.OverrideWithNetipPrefixesSlice(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes) } func (b DNSBlacklist) ToBlacklistFormat() (settings blacklist.BuilderSettings, err error) { @@ -90,8 +90,8 @@ func (b DNSBlacklist) ToBlacklistFormat() (settings blacklist.BuilderSettings, e BlockSurveillance: *b.BlockSurveillance, AllowedHosts: b.AllowedHosts, AddBlockedHosts: b.AddBlockedHosts, - AddBlockedIPs: b.AddBlockedIPs, - AddBlockedIPPrefixes: b.AddBlockedIPPrefixes, + AddBlockedIPs: netipAddressesToNetaddrIPs(b.AddBlockedIPs), + AddBlockedIPPrefixes: netipPrefixesToNetaddrIPPrefixes(b.AddBlockedIPPrefixes), }, nil } diff --git a/internal/configuration/settings/helpers/copy.go b/internal/configuration/settings/helpers/copy.go index b93e7712..9047666e 100644 --- a/internal/configuration/settings/helpers/copy.go +++ b/internal/configuration/settings/helpers/copy.go @@ -1,11 +1,12 @@ package helpers import ( + "fmt" "net" + "net/netip" "time" "github.com/qdm12/log" - "inet.af/netaddr" ) func CopyStringPtr(original *string) (copied *string) { @@ -113,21 +114,17 @@ func CopyIPNetPtr(original *net.IPNet) (copied *net.IPNet) { return copied } -func CopyNetaddrIP(original netaddr.IP) (copied netaddr.IP) { - b, err := original.MarshalBinary() - if err != nil { - panic(err) +func CopyNetipAddress(original netip.Addr) (copied netip.Addr) { + // AsSlice creates a new byte slice so no need to copy the bytes. + bytes := original.AsSlice() + copied, ok := netip.AddrFromSlice(bytes) + if !ok { + panic(fmt.Sprintf("cannot deep copy address with bytes %#v", bytes)) } - - err = copied.UnmarshalBinary(b) - if err != nil { - panic(err) - } - return copied } -func CopyIPPrefix(original netaddr.IPPrefix) (copied netaddr.IPPrefix) { +func CopyNetipPrefix(original netip.Prefix) (copied netip.Prefix) { b, err := original.MarshalText() if err != nil { panic(err) @@ -173,26 +170,26 @@ func CopyIPNetSlice(original []net.IPNet) (copied []net.IPNet) { return copied } -func CopyIPPrefixSlice(original []netaddr.IPPrefix) (copied []netaddr.IPPrefix) { +func CopyNetipPrefixesSlice(original []netip.Prefix) (copied []netip.Prefix) { if original == nil { return nil } - copied = make([]netaddr.IPPrefix, len(original)) + copied = make([]netip.Prefix, len(original)) for i := range original { - copied[i] = CopyIPPrefix(original[i]) + copied[i] = CopyNetipPrefix(original[i]) } return copied } -func CopyNetaddrIPsSlice(original []netaddr.IP) (copied []netaddr.IP) { +func CopyNetipAddressesSlice(original []netip.Addr) (copied []netip.Addr) { if original == nil { return nil } - copied = make([]netaddr.IP, len(original)) + copied = make([]netip.Addr, len(original)) for i := range original { - copied[i] = CopyNetaddrIP(original[i]) + copied[i] = CopyNetipAddress(original[i]) } return copied diff --git a/internal/configuration/settings/helpers/merge.go b/internal/configuration/settings/helpers/merge.go index 4b96218d..81b9087a 100644 --- a/internal/configuration/settings/helpers/merge.go +++ b/internal/configuration/settings/helpers/merge.go @@ -3,10 +3,10 @@ package helpers import ( "net" "net/http" + "net/netip" "time" "github.com/qdm12/log" - "inet.af/netaddr" ) func MergeWithBool(existing, other *bool) (result *bool) { @@ -213,13 +213,13 @@ func MergeIPNetsSlices(a, b []net.IPNet) (result []net.IPNet) { return result } -func MergeNetaddrIPsSlices(a, b []netaddr.IP) (result []netaddr.IP) { +func MergeNetipAddressesSlices(a, b []netip.Addr) (result []netip.Addr) { if a == nil && b == nil { return nil } seen := make(map[string]struct{}, len(a)+len(b)) - result = make([]netaddr.IP, 0, len(a)+len(b)) + result = make([]netip.Addr, 0, len(a)+len(b)) for _, ip := range a { key := ip.String() if _, ok := seen[key]; ok { @@ -239,13 +239,13 @@ func MergeNetaddrIPsSlices(a, b []netaddr.IP) (result []netaddr.IP) { return result } -func MergeIPPrefixesSlices(a, b []netaddr.IPPrefix) (result []netaddr.IPPrefix) { +func MergeNetipPrefixesSlices(a, b []netip.Prefix) (result []netip.Prefix) { if a == nil && b == nil { return nil } seen := make(map[string]struct{}, len(a)+len(b)) - result = make([]netaddr.IPPrefix, 0, len(a)+len(b)) + result = make([]netip.Prefix, 0, len(a)+len(b)) for _, ipPrefix := range a { key := ipPrefix.String() if _, ok := seen[key]; ok { diff --git a/internal/configuration/settings/helpers/override.go b/internal/configuration/settings/helpers/override.go index 49c5ddf2..165b9a16 100644 --- a/internal/configuration/settings/helpers/override.go +++ b/internal/configuration/settings/helpers/override.go @@ -3,10 +3,10 @@ package helpers import ( "net" "net/http" + "net/netip" "time" "github.com/qdm12/log" - "inet.af/netaddr" ) func OverrideWithBool(existing, other *bool) (result *bool) { @@ -154,20 +154,20 @@ func OverrideWithIPNetsSlice(existing, other []net.IPNet) (result []net.IPNet) { return result } -func OverrideWithNetaddrIPsSlice(existing, other []netaddr.IP) (result []netaddr.IP) { +func OverrideWithNetipAddressesSlice(existing, other []netip.Addr) (result []netip.Addr) { if other == nil { return existing } - result = make([]netaddr.IP, len(other)) + result = make([]netip.Addr, len(other)) copy(result, other) return result } -func OverrideWithIPPrefixesSlice(existing, other []netaddr.IPPrefix) (result []netaddr.IPPrefix) { +func OverrideWithNetipPrefixesSlice(existing, other []netip.Prefix) (result []netip.Prefix) { if other == nil { return existing } - result = make([]netaddr.IPPrefix, len(other)) + result = make([]netip.Prefix, len(other)) copy(result, other) return result } diff --git a/internal/configuration/settings/netaddr.go b/internal/configuration/settings/netaddr.go new file mode 100644 index 00000000..9c931398 --- /dev/null +++ b/internal/configuration/settings/netaddr.go @@ -0,0 +1,36 @@ +package settings + +import ( + "net/netip" + + "inet.af/netaddr" +) + +func netipAddressToNetaddrIP(address netip.Addr) (ip netaddr.IP) { + if address.Is4() { + return netaddr.IPFrom4(address.As4()) + } + return netaddr.IPFrom16(address.As16()) +} + +func netipAddressesToNetaddrIPs(addresses []netip.Addr) (ips []netaddr.IP) { + ips = make([]netaddr.IP, len(addresses)) + for i := range addresses { + ips[i] = netipAddressToNetaddrIP(addresses[i]) + } + return ips +} + +func netipPrefixToNetaddrIPPrefix(prefix netip.Prefix) (ipPrefix netaddr.IPPrefix) { + netaddrIP := netipAddressToNetaddrIP(prefix.Addr()) + bits := prefix.Bits() + return netaddr.IPPrefixFrom(netaddrIP, uint8(bits)) +} + +func netipPrefixesToNetaddrIPPrefixes(prefixes []netip.Prefix) (ipPrefixes []netaddr.IPPrefix) { + ipPrefixes = make([]netaddr.IPPrefix, len(prefixes)) + for i := range ipPrefixes { + ipPrefixes[i] = netipPrefixToNetaddrIPPrefix(prefixes[i]) + } + return ipPrefixes +} diff --git a/internal/configuration/settings/unbound.go b/internal/configuration/settings/unbound.go index 52a779f8..4df8b2b3 100644 --- a/internal/configuration/settings/unbound.go +++ b/internal/configuration/settings/unbound.go @@ -4,12 +4,12 @@ import ( "errors" "fmt" "net" + "net/netip" "github.com/qdm12/dns/pkg/provider" "github.com/qdm12/dns/pkg/unbound" "github.com/qdm12/gluetun/internal/configuration/settings/helpers" "github.com/qdm12/gotree" - "inet.af/netaddr" ) // Unbound is settings for the Unbound program. @@ -21,7 +21,7 @@ type Unbound struct { VerbosityDetailsLevel *uint8 ValidationLogLevel *uint8 Username string - Allowed []netaddr.IPPrefix + Allowed []netip.Prefix } func (u *Unbound) setDefaults() { @@ -44,9 +44,9 @@ func (u *Unbound) setDefaults() { u.ValidationLogLevel = helpers.DefaultUint8(u.ValidationLogLevel, defaultValidationLogLevel) if u.Allowed == nil { - u.Allowed = []netaddr.IPPrefix{ - netaddr.IPPrefixFrom(netaddr.IPv4(0, 0, 0, 0), 0), - netaddr.IPPrefixFrom(netaddr.IPv6Raw([16]byte{}), 0), + u.Allowed = []netip.Prefix{ + netip.PrefixFrom(netip.AddrFrom4([4]byte{}), 0), + netip.PrefixFrom(netip.AddrFrom16([16]byte{}), 0), } } @@ -102,7 +102,7 @@ func (u Unbound) copy() (copied Unbound) { VerbosityDetailsLevel: helpers.CopyUint8Ptr(u.VerbosityDetailsLevel), ValidationLogLevel: helpers.CopyUint8Ptr(u.ValidationLogLevel), Username: u.Username, - Allowed: helpers.CopyIPPrefixSlice(u.Allowed), + Allowed: helpers.CopyNetipPrefixesSlice(u.Allowed), } } @@ -114,7 +114,7 @@ func (u *Unbound) mergeWith(other Unbound) { u.VerbosityDetailsLevel = helpers.MergeWithUint8(u.VerbosityDetailsLevel, other.VerbosityDetailsLevel) u.ValidationLogLevel = helpers.MergeWithUint8(u.ValidationLogLevel, other.ValidationLogLevel) u.Username = helpers.MergeWithString(u.Username, other.Username) - u.Allowed = helpers.MergeIPPrefixesSlices(u.Allowed, other.Allowed) + u.Allowed = helpers.MergeNetipPrefixesSlices(u.Allowed, other.Allowed) } func (u *Unbound) overrideWith(other Unbound) { @@ -125,7 +125,7 @@ func (u *Unbound) overrideWith(other Unbound) { u.VerbosityDetailsLevel = helpers.OverrideWithUint8(u.VerbosityDetailsLevel, other.VerbosityDetailsLevel) u.ValidationLogLevel = helpers.OverrideWithUint8(u.ValidationLogLevel, other.ValidationLogLevel) u.Username = helpers.OverrideWithString(u.Username, other.Username) - u.Allowed = helpers.OverrideWithIPPrefixesSlice(u.Allowed, other.Allowed) + u.Allowed = helpers.OverrideWithNetipPrefixesSlice(u.Allowed, other.Allowed) } func (u Unbound) ToUnboundFormat() (settings unbound.Settings, err error) { @@ -149,7 +149,7 @@ func (u Unbound) ToUnboundFormat() (settings unbound.Settings, err error) { VerbosityDetailsLevel: *u.VerbosityDetailsLevel, ValidationLogLevel: *u.ValidationLogLevel, AccessControl: unbound.AccessControlSettings{ - Allowed: u.Allowed, + Allowed: netipPrefixesToNetaddrIPPrefixes(u.Allowed), }, Username: u.Username, }, nil diff --git a/internal/configuration/settings/unbound_test.go b/internal/configuration/settings/unbound_test.go index 35f4db0e..f787fcf4 100644 --- a/internal/configuration/settings/unbound_test.go +++ b/internal/configuration/settings/unbound_test.go @@ -2,11 +2,11 @@ package settings import ( "encoding/json" + "net/netip" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "inet.af/netaddr" ) func Test_Unbound_JSON(t *testing.T) { @@ -20,9 +20,9 @@ func Test_Unbound_JSON(t *testing.T) { VerbosityDetailsLevel: nil, ValidationLogLevel: uint8Ptr(0), Username: "user", - Allowed: []netaddr.IPPrefix{ - netaddr.IPPrefixFrom(netaddr.IPv4(0, 0, 0, 0), 0), - netaddr.IPPrefixFrom(netaddr.IPv6Raw([16]byte{}), 0), + Allowed: []netip.Prefix{ + netip.PrefixFrom(netip.AddrFrom4([4]byte{}), 0), + netip.PrefixFrom(netip.AddrFrom16([16]byte{}), 0), }, } diff --git a/internal/configuration/sources/env/dnsblacklist.go b/internal/configuration/sources/env/dnsblacklist.go index 752d8a9d..480c6f8c 100644 --- a/internal/configuration/sources/env/dnsblacklist.go +++ b/internal/configuration/sources/env/dnsblacklist.go @@ -3,10 +3,10 @@ package env import ( "errors" "fmt" + "net/netip" "github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/govalid/binary" - "inet.af/netaddr" ) func (s *Source) readDNSBlacklist() (blacklist settings.DNSBlacklist, err error) { @@ -55,24 +55,24 @@ var ( ErrPrivateAddressNotValid = errors.New("private address is not a valid IP or CIDR range") ) -func readDoTPrivateAddresses() (ips []netaddr.IP, - ipPrefixes []netaddr.IPPrefix, err error) { +func readDoTPrivateAddresses() (ips []netip.Addr, + ipPrefixes []netip.Prefix, err error) { privateAddresses := envToCSV("DOT_PRIVATE_ADDRESS") if len(privateAddresses) == 0 { return nil, nil, nil } - ips = make([]netaddr.IP, 0, len(privateAddresses)) - ipPrefixes = make([]netaddr.IPPrefix, 0, len(privateAddresses)) + ips = make([]netip.Addr, 0, len(privateAddresses)) + ipPrefixes = make([]netip.Prefix, 0, len(privateAddresses)) for _, privateAddress := range privateAddresses { - ip, err := netaddr.ParseIP(privateAddress) + ip, err := netip.ParseAddr(privateAddress) if err == nil { ips = append(ips, ip) continue } - ipPrefix, err := netaddr.ParseIPPrefix(privateAddress) + ipPrefix, err := netip.ParsePrefix(privateAddress) if err == nil { ipPrefixes = append(ipPrefixes, ipPrefix) continue