diff --git a/cmd/api-router.go b/cmd/api-router.go index c5ed69d54..68c5a19b2 100644 --- a/cmd/api-router.go +++ b/cmd/api-router.go @@ -88,7 +88,7 @@ func registerAPIRouter(mux *router.Router) { // HeadBucket bucket.Methods("HEAD").HandlerFunc(httpTraceAll(api.HeadBucketHandler)) // PostPolicy - bucket.Methods("POST").Path("/").HeadersRegexp("Content-Type", "multipart/form-data*").HandlerFunc(httpTraceAll(api.PostPolicyBucketHandler)) + bucket.Methods("POST").HeadersRegexp("Content-Type", "multipart/form-data*").HandlerFunc(httpTraceAll(api.PostPolicyBucketHandler)) // DeleteMultipleObjects bucket.Methods("POST").HandlerFunc(httpTraceAll(api.DeleteMultipleObjectsHandler)).Queries("delete", "") // DeleteBucketPolicy diff --git a/cmd/bucket-handlers.go b/cmd/bucket-handlers.go index 627f9f947..e11de0540 100644 --- a/cmd/bucket-handlers.go +++ b/cmd/bucket-handlers.go @@ -24,6 +24,7 @@ import ( "net/http" "net/url" "path" + "path/filepath" "reflect" "strings" "sync" @@ -438,7 +439,6 @@ func (api objectAPIHandlers) PostPolicyBucketHandler(w http.ResponseWriter, r *h return } - // Make sure that the URL does not contain object name. bucket := mux.Vars(r)["bucket"] // Require Content-Length to be set in the request @@ -447,6 +447,16 @@ func (api objectAPIHandlers) PostPolicyBucketHandler(w http.ResponseWriter, r *h writeErrorResponse(w, ErrMissingContentLength, r.URL) return } + resource, err := getResource(r.URL.Path, r.Host, globalDomainName) + if err != nil { + writeErrorResponse(w, ErrInvalidRequest, r.URL) + return + } + // Make sure that the URL does not contain object name. + if bucket != filepath.Clean(resource[1:]) { + writeErrorResponse(w, ErrMethodNotAllowed, r.URL) + return + } // Here the parameter is the size of the form data that should // be loaded in memory, the remaining being put in temporary files. diff --git a/cmd/gateway-router.go b/cmd/gateway-router.go index cd3221772..8c7356c7b 100644 --- a/cmd/gateway-router.go +++ b/cmd/gateway-router.go @@ -121,7 +121,7 @@ func registerGatewayAPIRouter(mux *router.Router, gw GatewayLayer) { // HeadBucket bucket.Methods("HEAD").HandlerFunc(httpTraceAll(api.HeadBucketHandler)) // PostPolicy - bucket.Methods("POST").Path("/").HeadersRegexp("Content-Type", "multipart/form-data*").HandlerFunc(httpTraceAll(api.PostPolicyBucketHandler)) + bucket.Methods("POST").HeadersRegexp("Content-Type", "multipart/form-data*").HandlerFunc(httpTraceAll(api.PostPolicyBucketHandler)) // DeleteMultipleObjects bucket.Methods("POST").HandlerFunc(httpTraceAll(api.DeleteMultipleObjectsHandler)).Queries("delete", "") // DeleteBucketPolicy