On 12/05/2010 12:57 AM, Daniel Veillard wrote:
On Fri, Dec 03, 2010 at 02:56:14PM -0700, Eric Blake wrote:
> The log lists things like -smbios type=1,vendor="Red Hat", which
> is great for shell parsing, but not so great when you realize that
> execve() then passes those literal "" on as part of the command
> line argument, such that qemu sets SMBIOS with extra literal quotes.
Hum, I was afraid that QEmu parsing would fail in case of spaces if
there is no quote, but if you checked this, sure !
What's happening here is that we are building up execve arguments, and
supplying roughly:
"qemu" "-smbios" "type=0,vendor=\"Red
Hat\",version=\"Fedora 14\""
instead of the intended:
"qemu" "-smbios" "type=0,vendor=Red Hat,version=Fedora 14"
Although qemu uses a hand-rolled loop instead of getsubopt(), it looks
like qemu is using the same algorithm as getsubopt, where it parses
everything between '=' and ',', including spaces, as the subopt
argument. At any rate, yes, I did test this; the only thing you can't
pass through qemu's -smbios is a literal comma, but that's already
excluded from our domain.rng schema. :)
ACK,
Thanks; I've pushed 1 through 4; I'm waiting to push 5 until after my
virCommand buffer patches have been ACK'd, so as to avoid any question
of any potential NULL dereferences due to the virCommandSetOutputBuffer
calls.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org