aboutsummaryrefslogtreecommitdiff
path: root/block/nbd.c
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2020-02-11 20:31:01 -0600
committerEric Blake <eblake@redhat.com>2020-02-26 14:45:02 -0600
commit2485f22fe9211b2e80970f83199b320eee211319 (patch)
treeb8a36d243a80c0d12c6e40e9e636c226df7bdcb5 /block/nbd.c
parent73e064ccf09d908febc83761addcc6e76feabf78 (diff)
downloadqemu-2485f22fe9211b2e80970f83199b320eee211319.zip
qemu-2485f22fe9211b2e80970f83199b320eee211319.tar.gz
qemu-2485f22fe9211b2e80970f83199b320eee211319.tar.bz2
nbd-client: Support leading / in NBD URI
The NBD URI specification [1] states that only one leading slash at the beginning of the URI path component is stripped, not all such slashes. This becomes important to a patch I just proposed to nbdkit [2], which would allow the exportname to select a file embedded within an ext2 image: ext2fs demands an absolute pathname beginning with '/', and because qemu was inadvertantly stripping it, my nbdkit patch had to work around the behavior. [1] https://github.com/NetworkBlockDevice/nbd/blob/master/doc/uri.md [2] https://www.redhat.com/archives/libguestfs/2020-February/msg00109.html Note that the qemu bug only affects handling of URIs such as nbd://host:port//abs/path (where '/abs/path' should be the export name); it is still possible to use --image-opts and pass the desired export name with a leading slash directly through JSON even without this patch. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20200212023101.1162686-1-eblake@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
Diffstat (limited to 'block/nbd.c')
-rw-r--r--block/nbd.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/block/nbd.c b/block/nbd.c
index 6d3b22f..f69e61e 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -1528,8 +1528,10 @@ static int nbd_parse_uri(const char *filename, QDict *options)
goto out;
}
- p = uri->path ? uri->path : "/";
- p += strspn(p, "/");
+ p = uri->path ? uri->path : "";
+ if (p[0] == '/') {
+ p++;
+ }
if (p[0]) {
qdict_put_str(options, "export", p);
}