Browse Source

Merge pull request #6168 from vieux/add_proto_validation

add proto validation at parse
unclejack 11 years ago
parent
commit
a8ade72b6a
1 changed files with 14 additions and 1 deletions
  1. 14 1
      nat/nat.go

+ 14 - 1
nat/nat.go

@@ -5,9 +5,10 @@ package nat
 
 
 import (
 import (
 	"fmt"
 	"fmt"
-	"github.com/dotcloud/docker/utils"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
+
+	"github.com/dotcloud/docker/utils"
 )
 )
 
 
 const (
 const (
@@ -72,6 +73,15 @@ func SplitProtoPort(rawPort string) (string, string) {
 	return parts[1], parts[0]
 	return parts[1], parts[0]
 }
 }
 
 
+func validateProto(proto string) bool {
+	for _, availableProto := range []string{"tcp", "udp"} {
+		if availableProto == proto {
+			return true
+		}
+	}
+	return false
+}
+
 // We will receive port specs in the format of ip:public:private/proto and these need to be
 // We will receive port specs in the format of ip:public:private/proto and these need to be
 // parsed in the internal types
 // parsed in the internal types
 func ParsePortSpecs(ports []string) (map[Port]struct{}, map[Port][]PortBinding, error) {
 func ParsePortSpecs(ports []string) (map[Port]struct{}, map[Port][]PortBinding, error) {
@@ -113,6 +123,9 @@ func ParsePortSpecs(ports []string) (map[Port]struct{}, map[Port][]PortBinding,
 		if _, err := strconv.ParseUint(hostPort, 10, 16); hostPort != "" && err != nil {
 		if _, err := strconv.ParseUint(hostPort, 10, 16); hostPort != "" && err != nil {
 			return nil, nil, fmt.Errorf("Invalid hostPort: %s", hostPort)
 			return nil, nil, fmt.Errorf("Invalid hostPort: %s", hostPort)
 		}
 		}
+		if !validateProto(proto) {
+			return nil, nil, fmt.Errorf("Invalid proto: %s", proto)
+		}
 
 
 		port := NewPort(proto, containerPort)
 		port := NewPort(proto, containerPort)
 		if _, exists := exposedPorts[port]; !exists {
 		if _, exists := exposedPorts[port]; !exists {