[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH 4/4] virsh: concatenate qemu-monitor-command arguments



On 08/08/2011 03:40 AM, Daniel P. Berrange wrote:
On Fri, Aug 05, 2011 at 06:00:08PM -0600, Eric Blake wrote:
Call me lazy, but:

virsh qemu-monitor-command dom --hmp info status

is nicer than:

virsh qemu-monitor-command dom --hmp 'info status'

This does introduce a quoting problem though. eg consider

    virsh qemu-monitor-command dom --hmp 'foo  "Hello World"'

vs what you'd now allow:

    virsh qemu-monitor-command dom --hmp foo "Hello World"

This is no different from how the shell behaves. If you _want_ literal quotes to be part of the command, then you have to double-quote or otherwise escape those quotes. Here's some examples using two spaces to show where spacing is quoted vs. where concatenation occurs, in both shell and virsh.

$ echo a  "b  c"
a b  c
$ echo 'a  "b  c"'
a  "b  c"
$ echo a  \"b  c\"
a "b c"
$ virsh echo a  'b  c'
a b  c
$ virsh echo 'a  "b  c"'
a  "b  c"
$ virsh echo a  \"b  c\"
a "b c"
$ virsh
virsh # echo a  "b  c"
a b  c
virsh # echo 'a  "b  c"'
a  "b  c"
virsh # echo a  \"b  c\"
a "b c"
virsh # exit


-    if (vshCommandOptString(cmd, "cmd",&monitor_cmd)<= 0) {
-        vshError(ctl, "%s", _("missing monitor command"));
+    while ((opt = vshCommandOptArgv(cmd, opt))) {
+        virBufferAdd(&buf, opt->data, -1);
+        if (pad)
+            virBufferAddChar(&buf, ' ');
+        pad = true;
+    }

...this loop will loose the quoting on 'Hello World' I believe.

The shell already lost the quoting. Virsh should not be using heuristics to re-add arbitrary quoting, rather, if you need quoting to be passed through to the monitor command, you _have_ to use double-quoting or escapes. Your argument about losing quotes does not change this patch. Argument concatenation is most useful only for words that do not themselves contain quoting or spaces.

--
Eric Blake   eblake redhat com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]