savannah-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Savannah-users] Fwd: [PATCH] smart-http: Don't change POST to GET when


From: Miles Bader
Subject: [Savannah-users] Fwd: [PATCH] smart-http: Don't change POST to GET when following redirect
Date: Sat, 18 Sep 2010 18:18:53 +0900

I should have just CC'd savannah-users on my message to the git list,
but anyway...

-miles

---------- Forwarded message ----------
From: Andreas Schwab <address@hidden>
Date: Sat, Sep 18, 2010 at 5:47 PM
Subject: [PATCH] smart-http: Don't change POST to GET when following redirect
To: Ilari Liusvaara <address@hidden>
Cc: Miles Bader <address@hidden>, address@hidden


When the remote HTTP server returns a redirect the default libcurl action
is to change a POST request into a GET request while following the
redirect, but the remote http backend does not expect that.  Tell libcurl
to always keep the POST request.

Signed-off-by: Andreas Schwab <address@hidden>
---
Andreas Schwab <address@hidden> writes:

> Ilari Liusvaara <address@hidden> writes:
>
>> On Sat, Sep 18, 2010 at 01:33:48PM +0900, Miles Bader wrote:
>>
>>> The savannah.gnu.org admins are trying out the git "smart http" server,
>>> but it doesn't seem to handle http redirects properly... should it?
>>> Is this a bug with the git server?
>>>
>>> The follow is from Sylvain Beucler;
>>> > Hmmm, actually it works, but it doesn't support a HTTP redirect
>>> > (namely git.sv.gnu.org -> git.savannah.gnu.org).
>>> >
>>> > $ git clone http://git.sv.gnu.org/r/freedink.git
>>> > Initialized empty Git repository in /tmp/freedink/.git/
>>> > error: RPC failed; result=22, HTTP code = 405
>>
>> 405 (Method not allowed)? Can you see what request it is trying to send
>> and to where (the request that fails with 405 that is)?
>
> I think this is a bug in the apache setup at savannnah.  It is
> responding to POST .../git-upload-pack with both 301 and 405.  This does
> not happen if you use the redirected address directly.

Looking closer, this is actually a bug in git.  It does not set the
POSTREDIR option, so that libcurl changes the POST into GET when
following a redirection.

Andreas.

---
 remote-curl.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/remote-curl.c b/remote-curl.c
index 04d4813..309b024 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -393,6 +393,7 @@ static int post_rpc(struct rpc_state *rpc)
       curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
       curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
       curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
+       curl_easy_setopt(slot->curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);

       headers = curl_slist_append(headers, rpc->hdr_content_type);
       headers = curl_slist_append(headers, rpc->hdr_accept);
--
1.7.2.3


--
Andreas Schwab, address@hidden
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



-- 
Cat is power.  Cat is peace.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]