add proto validation at parse

Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
This commit is contained in:
Victor Vieux 2014-06-02 23:03:10 +00:00
parent b292928cd5
commit 0633b12b28

View file

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