From 6f9e9d2f42a43e7699ee4fa79fc7b7017dcf5b64 Mon Sep 17 00:00:00 2001 From: octeep Date: Wed, 30 Mar 2022 16:17:41 +0100 Subject: [PATCH] fix multi-value fields --- config.go | 43 +++++++++++++++++++++++++------------------ wireguard.go | 4 ++-- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/config.go b/config.go index 0cc123a..e85be71 100644 --- a/config.go +++ b/config.go @@ -14,7 +14,7 @@ import ( type DeviceConfig struct { SelfSecretKey string - SelfEndpoint *netip.Addr + SelfEndpoint []netip.Addr PeerPublicKey string PeerEndpoint string DNS []netip.Addr @@ -102,14 +102,14 @@ func encodeBase64ToHex(key string) (string, error) { return hex.EncodeToString(decoded), nil } -func parseCommaSeperatedNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) { +func parseNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) { key := section.Key(keyName) if key == nil { return []netip.Addr{}, nil } ips := []netip.Addr{} - for _, str := range strings.Split(key.String(), ",") { + for _, str := range key.StringsWithShadows(",") { str = strings.TrimSpace(str) ip, err := netip.ParseAddr(str) if err != nil { @@ -120,23 +120,27 @@ func parseCommaSeperatedNetIP(section *ini.Section, keyName string) ([]netip.Add return ips, nil } -func parseCIDRNetIP(section *ini.Section, keyName string) (*netip.Addr, error) { - prefixString, err := parseString(section, keyName) - if err != nil { - return nil, err +func parseCIDRNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) { + key := section.Key(keyName) + if key == nil { + return []netip.Addr{}, nil } - prefix, err := netip.ParsePrefix(prefixString) - if err != nil { - return nil, err - } + ips := []netip.Addr{} + for _, str := range key.StringsWithShadows(",") { + prefix, err := netip.ParsePrefix(str) + if err != nil { + return nil, err + } - addr := prefix.Addr() - if prefix.Bits() != addr.BitLen() { - return nil, errors.New("interface address subnet should be /32 for IPv4 and /128 for IPv6") - } + addr := prefix.Addr() + if prefix.Bits() != addr.BitLen() { + return nil, errors.New("interface address subnet should be /32 for IPv4 and /128 for IPv6") + } - return &addr, nil + ips = append(ips, addr) + } + return ips, nil } func resolveIP(ip string) (*net.IPAddr, error) { @@ -176,7 +180,7 @@ func ParseInterface(cfg *ini.File, device *DeviceConfig) error { } device.SelfSecretKey = privKey - dns, err := parseCommaSeperatedNetIP(section, "DNS") + dns, err := parseNetIP(section, "DNS") if err != nil { return err } @@ -343,7 +347,10 @@ func ParseSocks5Config(cfg *ini.File) ([]Socks5Config, error) { } func ParseConfig(path string) (*Configuration, error) { - cfg, err := ini.InsensitiveLoad(path) + cfg, err := ini.LoadSources(ini.LoadOptions{ + Insensitive: true, + AllowShadows: true, + }, path) if err != nil { return nil, err } diff --git a/wireguard.go b/wireguard.go index 938f1c0..ef17473 100644 --- a/wireguard.go +++ b/wireguard.go @@ -12,7 +12,7 @@ import ( type DeviceSetting struct { ipcRequest string dns []netip.Addr - deviceAddr *netip.Addr + deviceAddr []netip.Addr mtu int } @@ -34,7 +34,7 @@ func StartWireguard(conf *DeviceConfig) (*netstack.Net, error) { return nil, err } - tun, tnet, err := netstack.CreateNetTUN([]netip.Addr{*(setting.deviceAddr)}, setting.dns, setting.mtu) + tun, tnet, err := netstack.CreateNetTUN(setting.deviceAddr, setting.dns, setting.mtu) if err != nil { return nil, err }