diff --git a/aliases.go b/aliases.go index 204f8cc7..a03e1d67 100644 --- a/aliases.go +++ b/aliases.go @@ -34,25 +34,23 @@ func isValidAliasName(aliasName string) bool { // aliasExpand expands aliased (name:/path) to full URL, used by url-parser func aliasExpand(aliasedURL string, aliases map[string]string) (newURL string, err error) { - if aliasedURL == "" || aliases == nil { - return aliasedURL, iodine.New(errInvalidArgument{}, nil) - } u, err := url.Parse(aliasedURL) if err != nil { return aliasedURL, iodine.New(errInvalidURL{url: aliasedURL}, nil) } - if u.Scheme == "" { + // proper URL + if u.Host != "" { return aliasedURL, nil } for aliasName, expandedURL := range aliases { - if !isValidAliasName(aliasName) { - return "", iodine.New(errInvalidAliasName{name: aliasName}, nil) - } if strings.HasPrefix(aliasedURL, aliasName) { // Match found. Expand it. splits := strings.Split(aliasedURL, ":") - return expandedURL + "/" + splits[1], nil + if len(splits) == 2 { + return expandedURL + "/" + splits[1], nil + } + return expandedURL, nil } } - return aliasedURL, iodine.New(errAliasNotFound{name: aliasedURL}, nil) + return aliasedURL, nil } diff --git a/aliases_test.go b/aliases_test.go index 9b071891..e11e1e71 100644 --- a/aliases_test.go +++ b/aliases_test.go @@ -43,29 +43,29 @@ func (s *MySuite) TestEmptyExpansions(c *C) { // c.Skip("Test still being written") url, err := aliasExpand("hello", nil) c.Assert(url, Equals, "hello") - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) url, err = aliasExpand("minio://hello", nil) c.Assert(url, Equals, "minio://hello") - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) url, err = aliasExpand("$#\\", nil) c.Assert(url, Equals, "$#\\") - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) url, err = aliasExpand("foo:bar", map[string]string{"foo": "http://foo"}) c.Assert(url, Equals, "http://foo/bar") c.Assert(err, IsNil) - url, err = aliasExpand("myfoo:bar", map[string]string{"foo": "http://foo"}) + url, err = aliasExpand("myfoo:bar", nil) c.Assert(url, Equals, "myfoo:bar") - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) - url, err = aliasExpand("", map[string]string{"foo": "http://foo"}) + url, err = aliasExpand("", nil) c.Assert(url, Equals, "") - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) url, err = aliasExpand("hello", nil) c.Assert(url, Equals, "hello") - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) } diff --git a/cmd-config.go b/cmd-config.go index 48177eee..65e14ad4 100644 --- a/cmd-config.go +++ b/cmd-config.go @@ -205,6 +205,9 @@ func parseConfigInput(ctx *cli.Context) (config qdb.Store, err error) { if !strings.HasPrefix(url, "http") { return nil, iodine.New(errInvalidURL{url: url}, nil) } + if !isValidAliasName(aliasName) { + return nil, iodine.New(errInvalidAliasName{name: aliasName}, nil) + } aliases := configStore.GetMapString("Aliases") if _, ok := aliases[aliasName]; ok { return nil, iodine.New(errAliasExists{name: aliasName}, nil) diff --git a/cmd-ls.go b/cmd-ls.go index 8b51d77a..08ed1bb2 100644 --- a/cmd-ls.go +++ b/cmd-ls.go @@ -69,7 +69,7 @@ func doListCmd(ctx *cli.Context) { u, err := parseURL(arg, config.GetMapString("Aliases")) if err != nil { log.Debug.Println(iodine.New(err, nil)) - console.Fatalf("mc: Unable to parse URL [%s]\n", u) + console.Fatalf("mc: Unable to parse URL [%s]\n", arg) } manager := mcClientManager{} clnt, err := manager.getNewClient(u, globalDebugFlag) diff --git a/cmd_test.go b/cmd_test.go index 54ac969c..b61d8a3e 100644 --- a/cmd_test.go +++ b/cmd_test.go @@ -37,7 +37,7 @@ var _ = Suite(&CmdTestSuite{}) func (s *CmdTestSuite) TestCopyToSingleTarget(c *C) { manager := &MockclientManager{} sourceURL, err := parseURL("foo", nil) - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) data := "Hello World" md5Sum := md5.Sum([]byte(data)) @@ -45,7 +45,7 @@ func (s *CmdTestSuite) TestCopyToSingleTarget(c *C) { dataLength := int64(len(data)) targetURL, err := parseURL("bar", nil) - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) targetURLs := []string{targetURL} sourceReader, sourceWriter := io.Pipe() @@ -66,7 +66,7 @@ func (s *CmdTestSuite) TestCopyToSingleTarget(c *C) { manager.On("getTargetWriter", targetURL, hexMd5, dataLength).Return(targetWriter, nil).Once() doCopyCmd(manager, sourceURL, targetURLs) wg.Wait() - c.Assert(err, Not(IsNil)) + c.Assert(err, IsNil) c.Assert(resultBuffer.String(), DeepEquals, data) } diff --git a/errors.go b/errors.go index 56a17a29..f7ae7cbc 100644 --- a/errors.go +++ b/errors.go @@ -84,15 +84,6 @@ func (e errAliasExists) Error() string { return fmt.Sprintf("alias: %s exists", e.name) } -// errAliasNotFound - alias not found -type errAliasNotFound struct { - name string -} - -func (e errAliasNotFound) Error() string { - return "alias: " + e.name + " exists" -} - // errInvalidAuthKeys - invalid authorization keys type errInvalidAuthKeys struct{}