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