qemu/block
Fam Zheng 3494d65027 curl: refuse to open URL from HTTP server without range support
CURL driver requests partial data from server on guest IO req. For HTTP
and HTTPS, it uses "Range: ***" in requests, and this will not work if
server not accepting range. This patch does this check when open.

 * Removed curl_size_cb, which is not used: On one hand it's registered to
   libcurl as CURLOPT_WRITEFUNCTION, instead of CURLOPT_HEADERFUNCTION,
   which will get called with *data*, not *header*. On the other hand the
   s->len is assigned unconditionally later.

   In this gone function, the sscanf for "Content-Length: %zd", on
   (void *)ptr, which is not guaranteed to be zero-terminated, is
   potentially a security bug. So this patch fixes it as a side-effect. The
   bug is reported as: https://bugs.launchpad.net/qemu/+bug/1188943
   (Note the bug is marked "private" so you might not be able to see it)

 * Introduced curl_header_cb, which is used to parse header and mark the
   server as accepting range if "Accept-Ranges: bytes" line is seen from
   response header. If protocol is HTTP or HTTPS, but server response has
   no not this support, refuse to open this URL.

Note that python builtin module SimpleHTTPServer is an example of not
supporting range, if you need to test this driver, get a better server
or use internet URLs.

Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2013-07-05 09:40:18 +02:00
..
backup.c block: add basic backup support to block driver 2013-06-28 09:20:26 +02:00
blkdebug.c blkdebug: Add BLKDBG_FLUSH_TO_OS/DISK events 2013-06-06 11:27:22 +02:00
blkverify.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
bochs.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
cloop.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
commit.c block: Make BlockJobTypes const 2013-06-28 09:20:27 +02:00
cow.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
curl.c curl: refuse to open URL from HTTP server without range support 2013-07-05 09:40:18 +02:00
dmg.c block: Make find_image_format safe with NULL filename 2013-03-22 17:51:32 +01:00
gluster.c gluster: Return bdrv_has_zero_init = 0 2013-06-28 09:20:27 +02:00
iscsi.c iscsi: reorganize iscsi_readcapacity_sync 2013-06-18 12:43:03 +02:00
linux-aio.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
Makefile.objs block: add basic backup support to block driver 2013-06-28 09:20:26 +02:00
mirror.c block: Make BlockJobTypes const 2013-06-28 09:20:27 +02:00
nbd.c nbd: strip braces from literal IPv6 address in URI 2013-06-18 11:43:00 +02:00
parallels.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
qapi.c qmp: add ImageInfo in BlockDeviceInfo used by query-block 2013-06-07 13:37:45 +02:00
qcow2-cache.c block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
qcow2-cluster.c qcow2: Batch discards 2013-06-24 10:25:17 +02:00
qcow2-refcount.c qcow2: Batch discards 2013-06-24 10:25:17 +02:00
qcow2-snapshot.c qcow2: Add refcount update reason to all callers 2013-06-24 10:25:17 +02:00
qcow2.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
qcow2.h qcow2: Batch discards 2013-06-24 10:25:17 +02:00
qcow.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
qed-check.c qed: mark image clean after repair succeeds 2012-08-10 10:25:12 +02:00
qed-cluster.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-gencb.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-l2-cache.c qed: do not evict in-use L2 table cache entries 2012-03-12 15:14:06 +01:00
qed-table.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qed.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
qed.h block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
raw-aio.h block: make discard asynchronous 2013-01-15 10:03:47 +01:00
raw-posix.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
raw-win32.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
raw.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
rbd.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
sheepdog.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
snapshot.c block: move snapshot code in block.c to block/snapshot.c 2013-06-04 13:56:30 +02:00
ssh.c block/ssh: Set bdrv_has_zero_init according to the file type. 2013-06-28 09:20:27 +02:00
stream.c block: Make BlockJobTypes const 2013-06-28 09:20:27 +02:00
vdi.c block: change default of .has_zero_init to 0 2013-06-28 13:52:35 +02:00
vhdx.c block: add read-only support to VHDX image format. 2013-05-03 10:31:58 +02:00
vhdx.h block: initial VHDX driver support framework - supports open and probe 2013-05-03 10:31:58 +02:00
vmdk.c vmdk: Implement .bdrv_has_zero_init 2013-07-05 09:40:18 +02:00
vpc.c vpc: Implement .bdrv_has_zero_init 2013-06-28 10:21:00 +02:00
vvfat.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
win32-aio.c Remove twice include of qemu-common.h 2013-05-18 16:35:11 +04:00