qemu-irix/block
Max Reitz 03c320d803 block/file-*: *_parse_filename() and colons
The file drivers' *_parse_filename() implementations just strip the
optional protocol prefix off the filename. However, for e.g.
"file:foo:bar", this would lead to "foo:bar" being stored as the BDS's
filename which looks like it should be managed using the "foo" protocol.
This is especially troublesome if you then try to resolve a backing
filename based on "foo:bar".

This issue can only occur if the stripped part is a relative filename
("file:/foo:bar" will be shortened to "/foo:bar" and having a slash
before the first colon means that "/foo" is not recognized as a protocol
part). Therefore, we can easily fix it by prepending "./" to such
filenames.

Before this patch:
$ ./qemu-img create -f qcow2 backing.qcow2 64M
Formatting 'backing.qcow2', fmt=qcow2 size=67108864 encryption=off
    cluster_size=65536 lazy_refcounts=off refcount_bits=16
$ ./qemu-img create -f qcow2 -b backing.qcow2 file🔝image.qcow2
Formatting 'file🔝image.qcow2', fmt=qcow2 size=67108864
    backing_file=backing.qcow2 encryption=off cluster_size=65536
    lazy_refcounts=off refcount_bits=16
$ ./qemu-io file🔝image.qcow2
can't open device file🔝image.qcow2: Could not open backing file:
    Unknown protocol 'top'

After this patch:
$ ./qemu-io file🔝image.qcow2
[no error]

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20170522195217.12991-3-mreitz@redhat.com
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2017-05-29 15:39:54 +02:00
..
Makefile.objs
accounting.c
backup.c
blkdebug.c blkdebug: Add ability to override unmap geometries 2017-05-11 14:28:06 +02:00
blkreplay.c
blkverify.c
block-backend.c
bochs.c
cloop.c
commit.c
crypto.c
curl.c curl: do not do aio_poll when waiting for a free CURLState 2017-05-16 10:34:50 -04:00
dirty-bitmap.c
dmg-bz2.c
dmg.c
dmg.h
file-posix.c block/file-*: *_parse_filename() and colons 2017-05-29 15:39:54 +02:00
file-win32.c block/file-*: *_parse_filename() and colons 2017-05-29 15:39:54 +02:00
gluster.c
io.c block: Simplify BDRV_BLOCK_RAW recursion 2017-05-12 10:36:46 -04:00
iscsi-opts.c
iscsi.c
linux-aio.c
mirror.c mirror: Drop permissions on s->target on completion 2017-05-29 15:37:26 +02:00
nbd-client.c
nbd-client.h
nbd.c
nfs.c
null.c
parallels.c
qapi.c
qcow.c migration: Create migration/blocker.h 2017-05-17 12:04:59 +02:00
qcow2-cache.c
qcow2-cluster.c block: Tweak error message related to qemu-img amend 2017-05-29 15:39:54 +02:00
qcow2-refcount.c qcow2: Make distinction between zero cluster types obvious 2017-05-11 14:28:07 +02:00
qcow2-snapshot.c qcow2: Discard/zero clusters by byte count 2017-05-11 14:28:07 +02:00
qcow2.c qcow2: remove extra local_error variable 2017-05-29 15:39:53 +02:00
qcow2.h qcow2: Discard/zero clusters by byte count 2017-05-11 14:28:07 +02:00
qed-check.c
qed-cluster.c
qed-gencb.c
qed-l2-cache.c
qed-table.c
qed.c migration: migration.h was not needed 2017-05-18 19:20:59 +02:00
qed.h
quorum.c
raw-format.c
rbd.c
replication.c
sheepdog.c
snapshot.c
ssh.c
stream.c stream: fix crash in stream_start() when block_job_create() fails 2017-05-26 16:48:21 +02:00
throttle-groups.c
trace-events
vdi.c migration: Create migration/blocker.h 2017-05-17 12:04:59 +02:00
vhdx-endian.c
vhdx-log.c
vhdx.c migration: Create migration/blocker.h 2017-05-17 12:04:59 +02:00
vhdx.h
vmdk.c migration: Create migration/blocker.h 2017-05-17 12:04:59 +02:00
vpc.c migration: Create migration/blocker.h 2017-05-17 12:04:59 +02:00
vvfat.c migration: Create migration/blocker.h 2017-05-17 12:04:59 +02:00
vxhs.c
win32-aio.c
write-threshold.c