Commit afa970c0 authored by Ed Bartosh's avatar Ed Bartosh Committed by Lubomir I. Ivanov

kubeadm: fix url validation code

Fixed nil pointer dereference in url validation code that caused kubeamd panic: panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0xa7930c] goroutine 1 [running]: kubeadm/validation.ValidateURLs(0x40000bafe0, 0x2, 0x2, 0x1, 0x40002967b0, 0x0, 0x40002967b0, 0xf302a0) kubeadm/validation/validation.go:324 +0xcc kubeadm/validation.ValidateEtcd(0x400000b490, 0x4000296720, 0x0, 0x0, 0x0) kubeadm/validation/validation.go:291 +0x1f0 ... Fixes: kubernetes/kubeadm#1419 Signed-off-by: 's avatarEd Bartosh <eduard.bartosh@intel.com>
parent ff6a78dd
...@@ -318,12 +318,16 @@ func ValidateURLs(urls []string, requireHTTPS bool, fldPath *field.Path) field.E ...@@ -318,12 +318,16 @@ func ValidateURLs(urls []string, requireHTTPS bool, fldPath *field.Path) field.E
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
for _, urlstr := range urls { for _, urlstr := range urls {
u, err := url.Parse(urlstr) u, err := url.Parse(urlstr)
if err != nil || u.Scheme == "" { if err != nil {
allErrs = append(allErrs, field.Invalid(fldPath, urlstr, "not a valid URL")) allErrs = append(allErrs, field.Invalid(fldPath, urlstr, fmt.Sprintf("URL parse error: %v", err)))
continue
} }
if requireHTTPS && u.Scheme != "https" { if requireHTTPS && u.Scheme != "https" {
allErrs = append(allErrs, field.Invalid(fldPath, urlstr, "the URL must be using the HTTPS scheme")) allErrs = append(allErrs, field.Invalid(fldPath, urlstr, "the URL must be using the HTTPS scheme"))
} }
if u.Scheme == "" {
allErrs = append(allErrs, field.Invalid(fldPath, urlstr, "the URL without scheme is not allowed"))
}
} }
return allErrs return allErrs
} }
...@@ -457,7 +461,7 @@ func ValidateSocketPath(socket string, fldPath *field.Path) field.ErrorList { ...@@ -457,7 +461,7 @@ func ValidateSocketPath(socket string, fldPath *field.Path) field.ErrorList {
u, err := url.Parse(socket) u, err := url.Parse(socket)
if err != nil { if err != nil {
return append(allErrs, field.Invalid(fldPath, socket, fmt.Sprintf("url parsing error: %v", err))) return append(allErrs, field.Invalid(fldPath, socket, fmt.Sprintf("URL parsing error: %v", err)))
} }
if u.Scheme == "" { if u.Scheme == "" {
...@@ -465,7 +469,7 @@ func ValidateSocketPath(socket string, fldPath *field.Path) field.ErrorList { ...@@ -465,7 +469,7 @@ func ValidateSocketPath(socket string, fldPath *field.Path) field.ErrorList {
return append(allErrs, field.Invalid(fldPath, socket, fmt.Sprintf("path is not absolute: %s", socket))) return append(allErrs, field.Invalid(fldPath, socket, fmt.Sprintf("path is not absolute: %s", socket)))
} }
} else if u.Scheme != kubeadmapiv1beta1.DefaultUrlScheme { } else if u.Scheme != kubeadmapiv1beta1.DefaultUrlScheme {
return append(allErrs, field.Invalid(fldPath, socket, fmt.Sprintf("url scheme %s is not supported", u.Scheme))) return append(allErrs, field.Invalid(fldPath, socket, fmt.Sprintf("URL scheme %s is not supported", u.Scheme)))
} }
return allErrs return allErrs
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment