1
0
Fork 0
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:
Santhosh Manohar 2017-02-01 22:31:20 -08:00 committed by GitHub
commit 9e630d61d5
5 changed files with 17 additions and 49 deletions

View file

@ -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

View file

@ -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")
} }
} }

View file

@ -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 == "" {

View file

@ -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 {

View file

@ -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 {