Explorar el Código

update volume name regex

Disallow creating a volume starting with a /.

Signed-off-by: Jessica Frazelle <acidburn@docker.com>
Jessica Frazelle hace 9 años
padre
commit
b46f044bf7
Se han modificado 3 ficheros con 25 adiciones y 1 borrados
  1. 3 0
      utils/names.go
  2. 1 1
      volume/local/local.go
  3. 21 0
      volume/local/local_test.go

+ 3 - 0
utils/names.go

@@ -7,3 +7,6 @@ const RestrictedNameChars = `[a-zA-Z0-9][a-zA-Z0-9_.-]`
 
 // RestrictedNamePattern is a regular expression to validate names against the collection of restricted characters.
 var RestrictedNamePattern = regexp.MustCompile(`^/?` + RestrictedNameChars + `+$`)
+
+// RestrictedVolumeNamePattern is a regular expression to validate volume names against the collection of restricted characters.
+var RestrictedVolumeNamePattern = regexp.MustCompile(`^` + RestrictedNameChars + `+$`)

+ 1 - 1
volume/local/local.go

@@ -31,7 +31,7 @@ var (
 	// volumeNameRegex ensures the name assigned for the volume is valid.
 	// This name is used to create the bind directory, so we need to avoid characters that
 	// would make the path to escape the root directory.
-	volumeNameRegex = utils.RestrictedNamePattern
+	volumeNameRegex = utils.RestrictedVolumeNamePattern
 )
 
 // New instantiates a new Root instance with the provided scope. Scope

+ 21 - 0
volume/local/local_test.go

@@ -124,3 +124,24 @@ func TestCreate(t *testing.T) {
 		}
 	}
 }
+
+func TestValidateName(t *testing.T) {
+	r := &Root{}
+	names := map[string]bool{
+		"/testvol":    false,
+		"thing.d":     true,
+		"hello-world": true,
+		"./hello":     false,
+		".hello":      false,
+	}
+
+	for vol, expected := range names {
+		err := r.validateName(vol)
+		if expected && err != nil {
+			t.Fatalf("expected %s to be valid got %v", vol, err)
+		}
+		if !expected && err == nil {
+			t.Fatalf("expected %s to be invalid", vol)
+		}
+	}
+}