From nobody Mon Feb 9 11:07:26 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 150066091432955.38518803758143; Fri, 21 Jul 2017 11:15:14 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4900BC054C5E; Fri, 21 Jul 2017 18:15:12 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0E20C60F90; Fri, 21 Jul 2017 18:15:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 707574BB79; Fri, 21 Jul 2017 18:15:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6LIBdGa005161 for ; Fri, 21 Jul 2017 14:11:39 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0DD9360610; Fri, 21 Jul 2017 18:11:39 +0000 (UTC) Received: from antique-laptop.redhat.com (ovpn-204-33.brq.redhat.com [10.40.204.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6B7CC18258 for ; Fri, 21 Jul 2017 18:11:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4900BC054C5E Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 4900BC054C5E From: Pavel Hrdina To: libvir-list@redhat.com Date: Fri, 21 Jul 2017 20:11:30 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/3] qemu: properly handle '=' in the VNC socket path X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 21 Jul 2017 18:15:12 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" If a domain name contains a '=3D' and the unix socket path is auto-generated or socket path provided by user contains '=3D' QEMU is unable to properly parse the command line. In order to make it work we need to use the new command line syntax for VNC or we will fail to start/define such domain. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=3D1352529 Signed-off-by: Pavel Hrdina --- src/qemu/qemu_command.c | 5 ++- src/qemu/qemu_process.c | 51 ++++++++++++++++++= ++-- .../qemuxml2argvdata/qemuxml2argv-name-escape.args | 2 +- tests/qemuxml2argvtest.c | 1 + 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 0ce5aa5906..a0394a00ae 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7802,7 +7802,10 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigP= tr cfg, =20 switch (glisten->type) { case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: - virBufferAddLit(&opt, "unix:"); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_MULTI_SERVERS)) + virBufferAddLit(&opt, "vnc=3Dunix:"); + else + virBufferAddLit(&opt, "unix:"); virQEMUBuildBufferEscapeComma(&opt, glisten->socket); break; =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 525521aaf0..4e93420955 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4146,6 +4146,34 @@ qemuProcessGraphicsSetupNetworkAddress(virDomainGrap= hicsListenDefPtr glisten, return 0; } =20 +static int +qemuProcessVncValidateUnixSocket(const char *socket, + virQEMUCapsPtr qemuCaps) +{ + if (!socket) + return 0; + + /* The way how QEMU process options disallow using '=3D' in the unix s= ocket + * path. The reason is that the first option doesn't have to use its = name + * and -vnc has it's first option without name. However when the pars= er + * finds first '=3D' in the option it always split it into key=3Dvalue= pair + * which blocks having '=3D' in the socket path. Since QEMU 2.3.0 it'= s possible + * to use "vnc" as a key for the first option so we can use a unix soc= ket + * path with '=3D'. */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_MULTI_SERVERS)) + return 0; + + if (strchr(socket, '=3D')) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("QEMU does not support having '=3D' in the " + "VNC socket path '%s'."), socket); + return -1; + } + + return 0; +} + + =20 static int qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, @@ -4192,6 +4220,9 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr drive= r, if (virAsprintf(&glisten->socket, "%s/%s.sock", priv->libDir, type) < 0) goto cleanup; + if (qemuProcessVncValidateUnixSocket(glisten->socket, + priv->qemuCaps) <= 0) + goto cleanup; glisten->fromConfig =3D true; glisten->type =3D VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCK= ET; } else if (listenAddr) { @@ -4216,6 +4247,9 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr drive= r, if (virAsprintf(&glisten->socket, "%s/%s.sock", priv->libDir, type) < 0) goto cleanup; + if (qemuProcessVncValidateUnixSocket(glisten->socket, + priv->qemuCaps) < 0) + goto cleanup; glisten->autoGenerated =3D true; } break; @@ -4440,9 +4474,10 @@ qemuProcessStartWarnShmem(virDomainObjPtr vm) =20 =20 static int -qemuProcessStartValidateGraphics(virDomainObjPtr vm) +qemuProcessStartValidateGraphics(virDomainObjPtr vm, + virQEMUCapsPtr qemuCaps) { - size_t i; + size_t i, j; =20 for (i =3D 0; i < vm->def->ngraphics; i++) { virDomainGraphicsDefPtr graphics =3D vm->def->graphics[i]; @@ -4464,6 +4499,16 @@ qemuProcessStartValidateGraphics(virDomainObjPtr vm) case VIR_DOMAIN_GRAPHICS_TYPE_LAST: break; } + + if (graphics->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_VNC) { + for (j =3D 0; j < graphics->nListens; j++) { + virDomainGraphicsListenDefPtr glisten =3D &graphics->liste= ns[j]; + if (glisten->type =3D=3D VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_S= OCKET && + qemuProcessVncValidateUnixSocket(glisten->socket, qemu= Caps) < 0) { + return -1; + } + } + } } =20 return 0; @@ -4633,7 +4678,7 @@ qemuProcessStartValidate(virQEMUDriverPtr driver, if (qemuProcessStartValidateXML(driver, vm, qemuCaps, caps, flags) < 0) return -1; =20 - if (qemuProcessStartValidateGraphics(vm) < 0) + if (qemuProcessStartValidateGraphics(vm, qemuCaps) < 0) return -1; =20 if (qemuProcessStartValidateVideo(vm, qemuCaps) < 0) diff --git a/tests/qemuxml2argvdata/qemuxml2argv-name-escape.args b/tests/q= emuxml2argvdata/qemuxml2argv-name-escape.args index d94ab76312..dd0fc8dd05 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-name-escape.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-name-escape.args @@ -20,7 +20,7 @@ bar=3D2/monitor.sock,server,nowait \ -no-acpi \ -boot c \ -usb \ --vnc unix:/tmp/lib/domain--1-foo=3D1,,bar=3D2/vnc.sock \ +-vnc vnc=3Dunix:/tmp/lib/domain--1-foo=3D1,,bar=3D2/vnc.sock \ -spice unix,addr=3D/tmp/lib/domain--1-foo=3D1,,bar=3D2/spice.sock \ -vga cirrus \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x3 diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 25cfedd9f8..7dc7e52d86 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2655,6 +2655,7 @@ mymain(void) QEMU_CAPS_NAME_DEBUG_THREADS, QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_VNC, + QEMU_CAPS_VNC_MULTI_SERVERS, QEMU_CAPS_NAME_GUEST, QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_SPICE, --=20 2.13.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list