mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #1631 from mavenugo/nstrict
Reverting the strict network name check
This commit is contained in:
commit
9e630d61d5
5 changed files with 17 additions and 49 deletions
|
@ -1,8 +1,6 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"regexp"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/BurntSushi/toml"
|
"github.com/BurntSushi/toml"
|
||||||
|
@ -17,12 +15,6 @@ import (
|
||||||
"github.com/docker/libnetwork/osl"
|
"github.com/docker/libnetwork/osl"
|
||||||
)
|
)
|
||||||
|
|
||||||
// restrictedNameRegex represents the regular expression which regulates the allowed network or endpoint names.
|
|
||||||
const restrictedNameRegex = `^[\w]+[\w-. ]*[\w]+$`
|
|
||||||
|
|
||||||
// RestrictedNamePattern is a regular expression to validate names against the collection of restricted characters.
|
|
||||||
var restrictedNamePattern = regexp.MustCompile(restrictedNameRegex)
|
|
||||||
|
|
||||||
// Config encapsulates configurations of various Libnetwork components
|
// Config encapsulates configurations of various Libnetwork components
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Daemon DaemonCfg
|
Daemon DaemonCfg
|
||||||
|
@ -240,12 +232,12 @@ func (c *Config) ProcessOptions(options ...Option) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateName validates configuration objects supported by libnetwork
|
// IsValidName validates configuration objects supported by libnetwork
|
||||||
func ValidateName(name string) error {
|
func IsValidName(name string) bool {
|
||||||
if !restrictedNamePattern.MatchString(name) {
|
if strings.TrimSpace(name) == "" {
|
||||||
return fmt.Errorf("%q includes invalid characters, resource name has to conform to %q", name, restrictedNameRegex)
|
return false
|
||||||
}
|
}
|
||||||
return nil
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// OptionLocalKVProvider function returns an option setter for kvstore provider
|
// OptionLocalKVProvider function returns an option setter for kvstore provider
|
||||||
|
|
|
@ -46,37 +46,14 @@ func TestOptionsLabels(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestValidName(t *testing.T) {
|
func TestValidName(t *testing.T) {
|
||||||
assertName(t, "test", true)
|
if !IsValidName("test") {
|
||||||
assertName(t, "test1", true)
|
t.Fatal("Name validation fails for a name that must be accepted")
|
||||||
assertName(t, "test1.2_3", true)
|
|
||||||
assertName(t, "_test", true)
|
|
||||||
assertName(t, "test_", true)
|
|
||||||
assertName(t, "looks-good", true)
|
|
||||||
assertName(t, " test", false)
|
|
||||||
assertName(t, "test ", false)
|
|
||||||
assertName(t, "test.", false)
|
|
||||||
assertName(t, ".test", false)
|
|
||||||
assertName(t, "", false)
|
|
||||||
assertName(t, " ", false)
|
|
||||||
assertName(t, "<>$$^", false)
|
|
||||||
assertName(t, "this is a good network name", true)
|
|
||||||
assertName(t, "this is also-good", true)
|
|
||||||
assertName(t, " this is a not good network name", false)
|
|
||||||
assertName(t, "this is a not either ", false)
|
|
||||||
assertName(t, "this one\nis not good", false)
|
|
||||||
assertName(t, "this one\tis not good", false)
|
|
||||||
assertName(t, "this one\ris not good", false)
|
|
||||||
assertName(t, "this one\vis not good", false)
|
|
||||||
assertName(t, "this one\fis not good", false)
|
|
||||||
}
|
|
||||||
func assertName(t *testing.T, name string, mustSucceed bool) {
|
|
||||||
msg := "Name validation succeeds for a case when it is expected to fail"
|
|
||||||
if mustSucceed {
|
|
||||||
msg = "Name validation fails for a name that must be accepted"
|
|
||||||
}
|
}
|
||||||
err := ValidateName(name)
|
if IsValidName("") {
|
||||||
if (err == nil) != mustSucceed {
|
t.Fatal("Name validation succeeds for a case when it is expected to fail")
|
||||||
t.Fatalf("%s: %s", msg, name)
|
}
|
||||||
|
if IsValidName(" ") {
|
||||||
|
t.Fatal("Name validation succeeds for a case when it is expected to fail")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -653,8 +653,8 @@ func (c *controller) NewNetwork(networkType, name string, id string, options ...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := config.ValidateName(name); err != nil {
|
if !config.IsValidName(name) {
|
||||||
return nil, ErrInvalidName(err.Error())
|
return nil, ErrInvalidName(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if id == "" {
|
if id == "" {
|
||||||
|
|
|
@ -69,7 +69,7 @@ func (ii ErrInvalidID) Error() string {
|
||||||
func (ii ErrInvalidID) BadRequest() {}
|
func (ii ErrInvalidID) BadRequest() {}
|
||||||
|
|
||||||
// ErrInvalidName is returned when a query-by-name or resource create method is
|
// ErrInvalidName is returned when a query-by-name or resource create method is
|
||||||
// invoked with an invalid name parameter
|
// invoked with an empty name parameter
|
||||||
type ErrInvalidName string
|
type ErrInvalidName string
|
||||||
|
|
||||||
func (in ErrInvalidName) Error() string {
|
func (in ErrInvalidName) Error() string {
|
||||||
|
|
|
@ -879,9 +879,8 @@ func (n *network) addEndpoint(ep *endpoint) error {
|
||||||
|
|
||||||
func (n *network) CreateEndpoint(name string, options ...EndpointOption) (Endpoint, error) {
|
func (n *network) CreateEndpoint(name string, options ...EndpointOption) (Endpoint, error) {
|
||||||
var err error
|
var err error
|
||||||
|
if !config.IsValidName(name) {
|
||||||
if err = config.ValidateName(name); err != nil {
|
return nil, ErrInvalidName(name)
|
||||||
return nil, ErrInvalidName(err.Error())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = n.EndpointByName(name); err == nil {
|
if _, err = n.EndpointByName(name); err == nil {
|
||||||
|
|
Loading…
Reference in a new issue