[Top][All Lists]
[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.
- [Savannah-users] Fwd: [PATCH] smart-http: Don't change POST to GET when following redirect,
Miles Bader <=