[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH] qemu-img / curl: When fetching Content-Size use GET
From: |
Boris Schrijver |
Subject: |
[Qemu-block] [PATCH] qemu-img / curl: When fetching Content-Size use GET instead of HEAD. |
Date: |
Mon, 7 Dec 2015 22:23:10 +0100 (CET) |
Hi all,
I was testing out the "qemu-img info/convert" options in combination with
"http/https" when I stumbled upon this issue. When "qemu-img info/convert" tries
to collect the file info it will first try to fetch the Content-Size of the
remote file. It does a HEAD request and after a GET request for the correct
range.
The HEAD request is an issue. Because when you've got a pre-signed url, for
example from S3, which INCLUDES the REQUEST METHOD in it's signature, you'll get
a 403 Forbidden.
It's is therefore better to use only the GET request method, and discard the
body at the first call.
Please review! I'll be ready for answers!
[PATCH] qemu-img / curl: When fetching Content-Size use GET instead of HEAD.
A server can respond different to both methods, or can block one of the two.
---
block/curl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/block/curl.c b/block/curl.c
index 8994182..2e74c32 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -594,11 +594,11 @@ static int curl_open(BlockDriverState *bs, QDict *options,
int flags,
// Get file size
s->accept_range = false;
- curl_easy_setopt(state->curl, CURLOPT_NOBODY, 1);
+ curl_easy_setopt(state->curl, CURLOPT_HTTPGET, 1);
curl_easy_setopt(state->curl, CURLOPT_HEADERFUNCTION,
curl_header_cb);
curl_easy_setopt(state->curl, CURLOPT_HEADERDATA, s);
- if (curl_easy_perform(state->curl))
+ if (curl_easy_perform(state->curl) != 23)
goto out;
curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d);
if (d)
--
2.1.4
--
Met vriendelijke groet / Kind regards,
Boris Schrijver
PCextreme B.V.
http://www.pcextreme.nl/contact
Tel direct: +31 (0) 118 700 215