From 40852801ea63d0e10f220c0d7d2a8d6a8efa5688 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Wed, 5 Dec 2018 23:28:48 +0100 Subject: [PATCH] fix: Better check of RPC type requests (#6927) guessIsRPCReq() considers all POST requests as RPC but doesn't check if this is an object operation API or not, which is actually confusing bucket forwarder handler when it receives a new multipart upload API which is a POST http request. Due to this bug, users having a federated setup are not able to upload a multipart object using an endpoint which doesn't actually contain the specified bucket that will store the object. Hence this commit will fix the described issue. --- cmd/generic-handlers.go | 3 ++- cmd/generic-handlers_test.go | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd/generic-handlers.go b/cmd/generic-handlers.go index 0c4aef3c2..626a129ee 100644 --- a/cmd/generic-handlers.go +++ b/cmd/generic-handlers.go @@ -228,7 +228,8 @@ func guessIsRPCReq(req *http.Request) bool { if req == nil { return false } - return req.Method == http.MethodPost + return req.Method == http.MethodPost && + strings.HasPrefix(req.URL.Path, minioReservedBucketPath+"/") } func (h redirectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { diff --git a/cmd/generic-handlers_test.go b/cmd/generic-handlers_test.go index 19e65b2a0..6c0ccf5e7 100644 --- a/cmd/generic-handlers_test.go +++ b/cmd/generic-handlers_test.go @@ -78,9 +78,16 @@ func TestGuessIsRPC(t *testing.T) { if guessIsRPCReq(nil) { t.Fatal("Unexpected return for nil request") } + + u, err := url.Parse("http://localhost:9000/minio/lock") + if err != nil { + t.Fatal(err) + } + r := &http.Request{ Proto: "HTTP/1.0", Method: http.MethodPost, + URL: u, } if !guessIsRPCReq(r) { t.Fatal("Test shouldn't fail for a possible net/rpc request.")