This commit is contained in:
jdl
2026-06-13 14:44:25 +02:00
parent a730211167
commit 232b68310c
5 changed files with 56 additions and 74 deletions

View File

@@ -1,19 +1,9 @@
package db
import (
"errors"
"net/netip"
"strings"
)
var (
ErrInvalidIP = errors.New("invalid IP")
ErrInvalidPeerIP = errors.New("invalid peer IP")
ErrNonPrivateIP = errors.New("non-private IP")
ErrInvalidPort = errors.New("invalid port")
ErrInvalidNetName = errors.New("invalid network name")
ErrNetNameNotLocal = errors.New("network name must end with .local")
ErrInvalidPeerName = errors.New("invalid peer name")
"vppn/hub/errs"
)
func Config_Sanitize(c *Config) {
@@ -35,11 +25,11 @@ func Network_Validate(c *Network) error {
// 15 bytes is linux limit for network interface names. With ending .local,
// max length is 21.
if len(c.LocalDomain) == 0 || len(c.LocalDomain) > 21 {
return ErrInvalidNetName
return errs.ErrInvalidNetName
}
if !strings.HasSuffix(c.LocalDomain, ".local") {
return ErrNetNameNotLocal
return errs.ErrNetNameNotLocal
}
for _, c := range strings.TrimSuffix(c.LocalDomain, ".local") {
@@ -49,16 +39,16 @@ func Network_Validate(c *Network) error {
if c >= '0' && c <= '9' {
continue
}
return ErrInvalidNetName
return errs.ErrInvalidNetName
}
addr, ok := netip.AddrFromSlice(c.Network)
if !ok || !addr.Is4() || addr.As4()[3] != 0 || addr.As4()[0] == 0 {
return ErrInvalidIP
return errs.ErrInvalidIP
}
if !addr.IsPrivate() {
return ErrNonPrivateIP
return errs.ErrNonPrivateIP
}
return nil
@@ -84,26 +74,26 @@ func Peer_Sanitize(p *Peer) {
func Peer_Validate(p *Peer) error {
if p.PeerIP < 1 || p.PeerIP > 254 {
return ErrInvalidPeerIP
return errs.ErrInvalidPeerIP
}
if len(p.Addr4) > 0 {
// Must be a genuine IPv4 address (reject an IPv6 in the v4 field).
if addr, ok := netip.AddrFromSlice(p.Addr4); !ok || !addr.Is4() {
return ErrInvalidIP
return errs.ErrInvalidIP
}
}
if len(p.Addr6) > 0 {
// Must be a genuine IPv6 address (reject IPv4 / IPv4-mapped in the v6 field).
if addr, ok := netip.AddrFromSlice(p.Addr6); !ok || !addr.Is6() || addr.Is4In6() {
return ErrInvalidIP
return errs.ErrInvalidIP
}
}
if p.Port == 0 {
return ErrInvalidPort
return errs.ErrInvalidPort
}
if len(p.Name) == 0 {
return ErrInvalidPeerName
return errs.ErrInvalidPeerName
}
for _, c := range p.Name {
if c >= 'a' && c <= 'z' {
@@ -115,7 +105,7 @@ func Peer_Validate(p *Peer) error {
if c == '-' {
continue
}
return ErrInvalidPeerName
return errs.ErrInvalidPeerName
}
return nil