The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/7737
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === As per discussion here https://github.com/lxc/lxd/pull/7721#discussion_r465766380 restricts network names to be URL segment safe.
From 5b8305ba6cc1a75dd0ba7bbbf93dc5895e0362ff Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 6 Aug 2020 17:40:33 +0100 Subject: [PATCH 1/7] shared/validate: Adds IsURLSegmentSafe function Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- shared/validate/validate.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/shared/validate/validate.go b/shared/validate/validate.go index cc1811d6ed..35d30dd699 100644 --- a/shared/validate/validate.go +++ b/shared/validate/validate.go @@ -312,3 +312,14 @@ func IsNetworkVLAN(value string) error { return nil } + +// IsURLSegmentSafe validates whether value can be used in a URL segment. +func IsURLSegmentSafe(value string) error { + for _, char := range []string{"/", "?", "&"} { + if strings.Contains(value, char) { + return fmt.Errorf("Cannot contain %q", char) + } + } + + return nil +} From b468279eff50513bba721f625f6442b71d125d68 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 6 Aug 2020 17:40:45 +0100 Subject: [PATCH 2/7] lxd/network/driver/common: Adds common ValidateName function Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/network/driver_common.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lxd/network/driver_common.go b/lxd/network/driver_common.go index 49baf2299b..9708c78057 100644 --- a/lxd/network/driver_common.go +++ b/lxd/network/driver_common.go @@ -19,6 +19,7 @@ import ( log "github.com/lxc/lxd/shared/log15" "github.com/lxc/lxd/shared/logger" "github.com/lxc/lxd/shared/logging" + "github.com/lxc/lxd/shared/validate" ) // common represents a generic LXD network. @@ -94,6 +95,11 @@ func (n *common) validate(config map[string]string, driverRules map[string]func( return nil } +// ValidateName validates network name. +func (n *common) ValidateName(name string) error { + return validate.IsURLSegmentSafe(name) +} + // ID returns the network ID. func (n *common) ID() int64 { return n.id From b7b46e00bc0de74b3df261dd9c63ddfe0c4e0e23 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 6 Aug 2020 17:41:19 +0100 Subject: [PATCH 3/7] lxd/network/driver/bridge: Changes ValidateName to use common validation too Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/network/driver_bridge.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lxd/network/driver_bridge.go b/lxd/network/driver_bridge.go index 82943e95f7..5518259f0a 100644 --- a/lxd/network/driver_bridge.go +++ b/lxd/network/driver_bridge.go @@ -120,7 +120,13 @@ func (n *bridge) fillConfig(config map[string]string) error { // ValidateName validates network name. func (n *bridge) ValidateName(name string) error { - return validInterfaceName(name) + err := validInterfaceName(name) + if err != nil { + return err + } + + // Apply common name validation that applies to all network types. + return n.common.ValidateName(name) } // Validate network config. From c92f86a06ec835011c0d2ad909ff23f2e527fc82 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 6 Aug 2020 17:42:54 +0100 Subject: [PATCH 4/7] lxd/network/driver: Removes ValidateName from sriov and macvlan Will use common validator. Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/network/driver_macvlan.go | 5 ----- lxd/network/driver_sriov.go | 5 ----- 2 files changed, 10 deletions(-) diff --git a/lxd/network/driver_macvlan.go b/lxd/network/driver_macvlan.go index 70cee2c98d..9581b3c255 100644 --- a/lxd/network/driver_macvlan.go +++ b/lxd/network/driver_macvlan.go @@ -14,11 +14,6 @@ type macvlan struct { common } -// ValidateName validates network name. -func (n *macvlan) ValidateName(name string) error { - return validVirtualNetworkName(name) -} - // Validate network config. func (n *macvlan) Validate(config map[string]string) error { rules := map[string]func(value string) error{ diff --git a/lxd/network/driver_sriov.go b/lxd/network/driver_sriov.go index da9412b4c8..f8edc3fd9f 100644 --- a/lxd/network/driver_sriov.go +++ b/lxd/network/driver_sriov.go @@ -14,11 +14,6 @@ type sriov struct { common } -// ValidateName validates network name. -func (n *sriov) ValidateName(name string) error { - return validVirtualNetworkName(name) -} - // Validate network config. func (n *sriov) Validate(config map[string]string) error { rules := map[string]func(value string) error{ From b062cebb6e6f97306e6303c430fbd0f091e065c2 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 6 Aug 2020 17:43:21 +0100 Subject: [PATCH 5/7] lxd/network/network/load: Adds field name context to name validation errors Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/network/network_load.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lxd/network/network_load.go b/lxd/network/network_load.go index 9ce8122d59..d65d7c2842 100644 --- a/lxd/network/network_load.go +++ b/lxd/network/network_load.go @@ -1,6 +1,8 @@ package network import ( + "github.com/pkg/errors" + "github.com/lxc/lxd/lxd/state" "github.com/lxc/lxd/shared/api" ) @@ -39,7 +41,12 @@ func ValidateName(name string, netType string) error { n := driverFunc() n.init(nil, 0, name, netType, "", nil, "Unknown") - return n.ValidateName(name) + err := n.ValidateName(name) + if err != nil { + return errors.Wrapf(err, "Network name invalid") + } + + return nil } // Validate validates the supplied network name and configuration for the specified network type. @@ -54,7 +61,7 @@ func Validate(name string, netType string, config map[string]string) error { err := n.ValidateName(name) if err != nil { - return err + return errors.Wrapf(err, "Network name invalid") } return n.Validate(config) From 315a628d489ffd7e338ba13eb7e5e9cacbd9f988 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 6 Aug 2020 17:43:45 +0100 Subject: [PATCH 6/7] lxd/network/network/utils: Removes validVirtualNetworkName Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/network/network_utils.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/lxd/network/network_utils.go b/lxd/network/network_utils.go index cd221009f6..18e6ea2d1e 100644 --- a/lxd/network/network_utils.go +++ b/lxd/network/network_utils.go @@ -50,15 +50,6 @@ func validInterfaceName(value string) error { return nil } -// validVirtualNetworkName validates a virtual network name (one that doesn't have an actual network interface). -func validVirtualNetworkName(value string) error { - if strings.Contains(value, "/") { - return fmt.Errorf(`Network name cannot contain "/"`) - } - - return nil -} - func networkValidPort(value string) error { if value == "" { return nil From 58c6f4c04332b2cea517f3495a0a64306a21361a Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 6 Aug 2020 17:44:00 +0100 Subject: [PATCH 7/7] lxd/networks: Returns network context on network startup failure Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/networks.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lxd/networks.go b/lxd/networks.go index cee9c0ea68..41838c41d2 100644 --- a/lxd/networks.go +++ b/lxd/networks.go @@ -933,14 +933,14 @@ func networkStartup(s *state.State) error { // Get a list of managed networks. networks, err := s.Cluster.GetNonPendingNetworks() if err != nil { - return err + return errors.Wrapf(err, "Failed to load networks") } // Bring them all up. for _, name := range networks { n, err := network.LoadByName(s, name) if err != nil { - return err + return errors.Wrapf(err, "Failed to load network %q", name) } err = n.Validate(n.Config())
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel