[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Savannah-users] Fwd: [PATCH] smart-http: Don't change POST to GET w
Re: [Savannah-users] Fwd: [PATCH] smart-http: Don't change POST to GET when following redirect
Sat, 18 Sep 2010 19:11:14 +0200
Until all Git clients are upgraded, I modified the instructions to
refer to http://git.savannah... instead of http://git.sv.
On Sat, Sep 18, 2010 at 06:18:53PM +0900, Miles Bader wrote:
> I should have just CC'd savannah-users on my message to the git list,
> but anyway...
> ---------- 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.
> 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);
> 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.