mirror of https://github.com/linkerd/linkerd2.git
44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// validateRangeSlice ensures that provided slice contains valid entries
|
|
// representing either port number(s) and/or port range(s). Invalid entries
|
|
// will result in an error being returned.
|
|
func validateRangeSlice(rangeSlice []string) error {
|
|
for _, portOrRange := range rangeSlice {
|
|
if strings.Contains(portOrRange, "-") {
|
|
bounds := strings.Split(portOrRange, "-")
|
|
if len(bounds) != 2 {
|
|
return fmt.Errorf("ranges expected as <lower>-<upper>")
|
|
}
|
|
lower, err := strconv.Atoi(bounds[0])
|
|
if err != nil || !isValidPort(lower) {
|
|
return fmt.Errorf("\"%s\" is not a valid lower-bound", bounds[0])
|
|
}
|
|
upper, err := strconv.Atoi(bounds[1])
|
|
if err != nil || !isValidPort(upper) {
|
|
return fmt.Errorf("\"%s\" is not a valid upper-bound", bounds[1])
|
|
}
|
|
if upper < lower {
|
|
return fmt.Errorf("\"%s\": upper-bound must be greater than or equal to lower-bound", portOrRange)
|
|
}
|
|
} else {
|
|
port, err := strconv.Atoi(portOrRange)
|
|
if err != nil || !isValidPort(port) {
|
|
return fmt.Errorf("\"%s\" is not a valid port nor port-range", portOrRange)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// isValidPort ensures that the provided value is a valid TCP port number, 0-65535 (inclusive).
|
|
func isValidPort(port int) bool {
|
|
return port >= 0 && port <= 65535
|
|
}
|