On 6/26/19 3:56 AM, Richard W.M. Jones wrote:
On Tue, Jun 25, 2019 at 09:35:11PM -0500, Eric Blake wrote:
> The existing --run '$nbd' outputs an older form that differs between
> libguestfs and qemu, and which is not always a valid URI. For
> historical compatibility, we probably can't change that; but we can
> instead add a new '$uri' that outputs a valid URI. Note that the
> libguestfs '$nbd' TCP form is already a valid URI, but that libguestfs
> still needs to be taught about the nbd+unix:// scheme, so for there,
> you are still better off using '$nbd'; but for qemu, using '$uri'
> already works since qemu v1.3.0 in 2012.
>
> Note that the NBD project has not actually yet posted a link for the
> preferred URI syntax; once Rich is happy with his work on that
> project, we can touch this up to link to that page.
>
> Reported-by: Martin Kletzander <mkletzan(a)redhat.com>
> Signed-off-by: Eric Blake <eblake(a)redhat.com>
> ---
> + fprintf (fp, "uri=");
> + if (port) {
> + fprintf (fp, "nbd://localhost:");
> + shell_quote (port, fp);
> + }
> + else if (unixsocket) {
> + fprintf (fp, "nbd+unix://\\?socket=");
> + shell_quote (unixsocket, fp);
> + }
> + fprintf (fp, "\n");
> +
> + /* Construct older $nbd "URL". Unfortunately guestfish and qemu take
> * different syntax, so try to guess which one we need.
> */
> fprintf (fp, "nbd=");
Looks reasonable, although I guess we may one day find we need more
quoting of unixsocket (both shell quoting and URI quoting, urrgh).
Oh, good point. Normally, our generated unixsocket name (assuming
$TMPDIR is sane) is valid as a URI query string without any % encoding,
or any shell quoting; but if $TMPDIR contains unusual characters (for
example, #), we need to URI-encode (rather than shell-quote).
Fortunately, any URI-encoded string needs no further shell quoting
(since any character that needs shell quoting also ends up getting
%-encoded for URI-encoding).
Anyway:
ACK
Rich.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org