From a6cdfdef4bb5907e82f683186cfe68481994ec8b Mon Sep 17 00:00:00 2001 From: Paulo Pires Date: Wed, 4 Jan 2017 14:32:41 +0000 Subject: [PATCH] kubeadm: make sure URL is valid for token discovery. --- cmd/kubeadm/app/discovery/flags.go | 9 +++++++++ cmd/kubeadm/app/discovery/flags_test.go | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/cmd/kubeadm/app/discovery/flags.go b/cmd/kubeadm/app/discovery/flags.go index cec184b0e91..e80a97b947d 100644 --- a/cmd/kubeadm/app/discovery/flags.go +++ b/cmd/kubeadm/app/discovery/flags.go @@ -76,6 +76,15 @@ func ParseURL(d *kubeadm.Discovery, s string) error { case "file": return file.Parse(u, d) case "token": + // Make sure a valid RFC 3986 URL has been passed and parsed. + // See https://github.com/kubernetes/kubeadm/issues/95#issuecomment-270431296 for more details. + if !strings.Contains(s, "@") { + s := s + "@" + u, err = url.Parse(s) + if err != nil { + return err + } + } return token.Parse(u, d) default: return fmt.Errorf("unknown discovery scheme") diff --git a/cmd/kubeadm/app/discovery/flags_test.go b/cmd/kubeadm/app/discovery/flags_test.go index dde621ed99b..c0a487a1ac5 100644 --- a/cmd/kubeadm/app/discovery/flags_test.go +++ b/cmd/kubeadm/app/discovery/flags_test.go @@ -37,6 +37,24 @@ func TestParseURL(t *testing.T) { Token: &kubeadm.TokenDiscovery{}, }, }, + { + url: "token://c05de9:ab224260fb3cd718", + expect: kubeadm.Discovery{ + Token: &kubeadm.TokenDiscovery{ + ID: "c05de9", + Secret: "ab224260fb3cd718", + }, + }, + }, + { + url: "token://c05de9:ab224260fb3cd718@", + expect: kubeadm.Discovery{ + Token: &kubeadm.TokenDiscovery{ + ID: "c05de9", + Secret: "ab224260fb3cd718", + }, + }, + }, { url: "token://c05de9:ab224260fb3cd718@192.168.0.1:6555,191.168.0.2:6443", expect: kubeadm.Discovery{ @@ -76,7 +94,7 @@ func TestParseURL(t *testing.T) { continue } if !reflect.DeepEqual(d, c.expect) { - t.Errorf("expected discovery config to be equeal but got:\n\ta: %s\n\tb: %s", spew.Sdump(d), spew.Sdump(c.expect)) + t.Errorf("expected discovery config to be equal but got:\n\tactual: %s\n\texpected: %s", spew.Sdump(d), spew.Sdump(c.expect)) } }