diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 5dd0e78b2f..bce38086d0 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -5366,6 +5366,14 @@ qemu-kvm -net nic,model=? /dev/null
This listen type tells a graphics server to listen on unix socket.
Attribute socket contains a path to unix socket. If this
attribute is omitted libvirt will generate this path for you.
+ Supported by graphics type vnc.
+
+
+ For vnc graphics be backward compatible
+ the socket attribute of first listen element
+ is duplicated as socket attribute in graphics
+ element. If graphics element contains a socket
+ attribute all listen elements are ignored.
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 0adf885584..c7698b48cc 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1244,7 +1244,6 @@ void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def)
switch (def->type) {
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
- VIR_FREE(def->data.vnc.socket);
VIR_FREE(def->data.vnc.keymap);
virDomainGraphicsAuthDefClear(&def->data.vnc.auth);
break;
@@ -10921,11 +10920,14 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
char *socket = virXMLPropString(node, "socket");
char *fromConfig = virXMLPropString(node, "fromConfig");
char *addressCompat = NULL;
+ char *socketCompat = NULL;
const char *graphicsType = virDomainGraphicsTypeToString(graphics->type);
int tmp, typeVal;
- if (parent)
+ if (parent) {
addressCompat = virXMLPropString(parent, "listen");
+ socketCompat = virXMLPropString(parent, "socket");
+ }
if (!type) {
virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -10940,7 +10942,8 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
}
def->type = typeVal;
- if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET) {
+ if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET &&
+ graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("listen type 'socket' is not available for "
"graphics type '%s'"), graphicsType);
@@ -10962,6 +10965,21 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
}
}
+ if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET) {
+ if (socket && socketCompat && STRNEQ(socket, socketCompat)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("graphics 'socket' attribute '%s' must match "
+ "'socket' attribute of first listen element "
+ "(found '%s')"), socketCompat, socket);
+ goto error;
+ }
+
+ if (!socket) {
+ socket = socketCompat;
+ socketCompat = NULL;
+ }
+ }
+
if (address && address[0] &&
(def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS ||
(def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK &&
@@ -11013,6 +11031,7 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
VIR_FREE(socket);
VIR_FREE(fromConfig);
VIR_FREE(addressCompat);
+ VIR_FREE(socketCompat);
return ret;
}
@@ -11032,12 +11051,6 @@ virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def,
ctxt->node = node;
- if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
- (socketPath = virXMLPropString(node, "socket"))) {
- ret = 0;
- goto error;
- }
-
/* parse the subelements for graphics types that support it */
nListens = virXPathNodeSet("./listen", ctxt, &listenNodes);
if (nListens < 0)
@@ -11059,16 +11072,43 @@ virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def,
def->nListens++;
}
VIR_FREE(listenNodes);
+ }
+
+ /* If no element was found in XML for backward compatibility
+ * we should try to parse 'listen' or 'socket' attribute from
+ * element. */
+ if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC)
+ socketPath = virXMLPropString(node, "socket");
+
+ if (socketPath) {
+ newListen.type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET;
+ newListen.socket = socketPath;
+ socketPath = NULL;
} else {
- /* If no element was found in XML for backward compatibility
- * we should try to parse 'listen' attribute from element. */
newListen.type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS;
newListen.address = virXMLPropString(node, "listen");
if (STREQ_NULLABLE(newListen.address, ""))
VIR_FREE(newListen.address);
+ }
+ /* If no element was found add a new one created by parsing
+ * element. */
+ if (def->nListens == 0) {
if (VIR_APPEND_ELEMENT(def->listens, def->nListens, newListen) < 0)
goto error;
+ } else {
+ virDomainGraphicsListenDefPtr glisten = &def->listens[0];
+
+ /* If the first element is 'address' or 'network' and we found
+ * 'socket' attribute inside element for backward
+ * compatibility we need to replace the first listen by
+ * element based on the 'socket' attribute. */
+ if ((glisten->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS ||
+ glisten->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK) &&
+ newListen.type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET) {
+ virDomainGraphicsListenDefClear(glisten);
+ *glisten = newListen;
+ }
}
ret = 0;
@@ -11146,7 +11186,6 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def,
}
}
- def->data.vnc.socket = virXMLPropString(node, "socket");
def->data.vnc.keymap = virXMLPropString(node, "keymap");
if (virDomainGraphicsAuthDefParseXML(node, &def->data.vnc.auth,
@@ -21796,11 +21835,21 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
switch (def->type) {
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
- if (def->data.vnc.socket) {
- if (!def->data.vnc.socketFromConfig ||
- !(flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE)) {
- virBufferEscapeString(buf, " socket='%s'",
- def->data.vnc.socket);
+ if (!glisten) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("missing listen element for graphics"));
+ return -1;
+ }
+
+ if (glisten->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET) {
+ /* To not break migration we shouldn't print the 'socket' attribute
+ * if it's auto-generated or if it's based on config option from
+ * qemu.conf. If the socket is provided by user we need to print it
+ * into migratable XML. */
+ if (glisten->socket &&
+ !((glisten->autoGenerated || glisten->fromConfig) &&
+ (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) {
+ virBufferEscapeString(buf, " socket='%s'", glisten->socket);
}
} else {
if (def->data.vnc.port &&
@@ -21906,9 +21955,23 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
for (i = 0; i < def->nListens; i++) {
if (def->listens[i].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE)
continue;
- if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
- def->listens[i].fromConfig)
- continue;
+ if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) {
+ /* If the listen is based on config options from qemu.conf we need
+ * to skip it. It's up to user to properly configure both hosts for
+ * migration. */
+ if (def->listens[i].fromConfig)
+ continue;
+
+ /* If the socket is provided by user in the XML we need to skip this
+ * listen type to support migration back to old libvirt since old
+ * libvirt supports specifying socket path inside graphics element
+ * as 'socket' attribute. Auto-generated socket is a new feature
+ * thus we can generate it in the migrateble XML. */
+ if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
+ def->listens[i].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET &&
+ !def->listens[i].autoGenerated)
+ continue;
+ }
if (!children) {
virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 05dbfc2943..3792562f09 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1454,8 +1454,6 @@ struct _virDomainGraphicsDef {
int websocket;
bool autoport;
char *keymap;
- char *socket;
- bool socketFromConfig;
virDomainGraphicsAuthDef auth;
int sharePolicy;
} vnc;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1500b0f8f2..971f4048d9 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7224,13 +7224,20 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
goto error;
}
- glisten = virDomainGraphicsGetListen(graphics, 0);
+ if (!(glisten = virDomainGraphicsGetListen(graphics, 0))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("missing listen element"));
+ goto error;
+ }
- if (graphics->data.vnc.socket) {
+ switch (glisten->type) {
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
virBufferAddLit(&opt, "unix:");
- qemuBufferEscapeComma(&opt, graphics->data.vnc.socket);
+ qemuBufferEscapeComma(&opt, glisten->socket);
+ break;
- } else {
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
if (!graphics->data.vnc.autoport &&
(graphics->data.vnc.port < 5900 ||
graphics->data.vnc.port > 65535)) {
@@ -7239,7 +7246,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
goto error;
}
- if (glisten && glisten->address) {
+ if (glisten->address) {
escapeAddr = strchr(glisten->address, ':') != NULL;
if (escapeAddr)
virBufferAsprintf(&opt, "[%s]", glisten->address);
@@ -7258,6 +7265,11 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
}
virBufferAsprintf(&opt, ",websocket=%d", graphics->data.vnc.websocket);
}
+ break;
+
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
+ break;
}
if (graphics->data.vnc.sharePolicy) {
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index f74b4b3a0c..d1f8175259 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2085,20 +2085,30 @@ qemuDomainRecheckInternalPaths(virDomainDefPtr def,
unsigned int flags)
{
size_t i = 0;
+ size_t j = 0;
for (i = 0; i < def->ngraphics; ++i) {
virDomainGraphicsDefPtr graphics = def->graphics[i];
- if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
- graphics->data.vnc.socket &&
- STRPREFIX(graphics->data.vnc.socket, cfg->libDir)) {
- if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) {
- VIR_FREE(graphics->data.vnc.socket);
- if (virDomainGraphicsListenAppendAddress(graphics, NULL) < 0)
- return -1;
+ for (j = 0; j < graphics->nListens; ++j) {
+ virDomainGraphicsListenDefPtr glisten = &graphics->listens[j];
+
+ /* This will happen only if we parse XML from old libvirts where
+ * unix socket was available only for VNC graphics. In this
+ * particular case we should follow the behavior and if we remove
+ * the auto-generated socket base on config option from qemu.conf
+ * we need to change the listen type to address. */
+ if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
+ glisten->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET &&
+ glisten->socket &&
+ STRPREFIX(glisten->socket, cfg->libDir)) {
+ if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) {
+ VIR_FREE(glisten->socket);
+ glisten->type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS;
+ } else {
+ glisten->fromConfig = true;
+ }
}
- else
- graphics->data.vnc.socketFromConfig = true;
}
}
diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
index 4fafdf266a..927bd7961f 100644
--- a/src/qemu/qemu_parse_command.c
+++ b/src/qemu/qemu_parse_command.c
@@ -509,7 +509,7 @@ qemuParseCommandLineVnc(virDomainDefPtr def,
if (STRPREFIX(val, "unix:")) {
/* -vnc unix:/some/big/path */
- if (VIR_STRDUP(vnc->data.vnc.socket, val + 5) < 0)
+ if (virDomainGraphicsListenAppendSocket(vnc, val + 5) < 0)
goto cleanup;
} else {
/*
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 89d963dbce..ce6bcce3c0 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3469,9 +3469,6 @@ qemuProcessVNCAllocatePorts(virQEMUDriverPtr driver,
{
unsigned short port;
- if (graphics->data.vnc.socket)
- return 0;
-
if (!allocate) {
if (graphics->data.vnc.autoport)
graphics->data.vnc.port = 5900;
@@ -4058,11 +4055,12 @@ qemuProcessGraphicsSetupListen(virQEMUDriverConfigPtr cfg,
* *_auto_unix_socket set we should use unix socket as
* default instead of tcp listen. */
if (useSocket) {
- VIR_DELETE_ELEMENT(graphics->listens, i, graphics->nListens);
- if (virAsprintf(&graphics->data.vnc.socket, "%s/%s.sock",
+ memset(glisten, 0, sizeof(virDomainGraphicsListenDef));
+ if (virAsprintf(&glisten->socket, "%s/%s.sock",
priv->libDir, type) < 0)
return -1;
- graphics->data.vnc.socketFromConfig = true;
+ glisten->fromConfig = true;
+ glisten->type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET;
} else if (listenAddr) {
if (VIR_STRDUP(glisten->address, listenAddr) < 0)
return -1;
@@ -4115,22 +4113,27 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver,
for (i = 0; i < vm->def->ngraphics; ++i) {
virDomainGraphicsDefPtr graphics = vm->def->graphics[i];
- switch (graphics->type) {
- case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
- if (qemuProcessVNCAllocatePorts(driver, graphics, allocate) < 0)
- goto cleanup;
- break;
+ if (graphics->nListens > 0 &&
+ (graphics->listens[0].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS ||
+ graphics->listens[0].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK)) {
+ switch (graphics->type) {
+ case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
+ if (qemuProcessVNCAllocatePorts(driver, graphics, allocate) < 0)
+ goto cleanup;
+ break;
- case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
- if (qemuProcessSPICEAllocatePorts(driver, cfg, graphics, allocate) < 0)
- goto cleanup;
- break;
+ case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
+ if (qemuProcessSPICEAllocatePorts(driver, cfg, graphics,
+ allocate) < 0)
+ goto cleanup;
+ break;
- case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
- case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
- case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
- case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
- break;
+ case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+ case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+ break;
+ }
}
if (qemuProcessGraphicsSetupListen(cfg, graphics, vm) < 0)
diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c
index b6cde42c8e..9eafaee4c8 100644
--- a/src/security/virt-aa-helper.c
+++ b/src/security/virt-aa-helper.c
@@ -1010,11 +1010,6 @@ get_files(vahControl * ctl)
virDomainGraphicsDefPtr graphics = ctl->def->graphics[i];
size_t n;
- if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
- graphics->data.vnc.socket &&
- vah_add_file(&buf, graphics->data.vnc.socket, "w"))
- goto cleanup;
-
for (n = 0; n < graphics->nListens; n++) {
virDomainGraphicsListenDef listenObj = graphics->listens[n];
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index 7eb78ca522..dc0a44945b 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -1019,7 +1019,6 @@ prlsdkAddVNCInfo(PRL_HANDLE sdkdom, virDomainDefPtr def)
gr->type = VIR_DOMAIN_GRAPHICS_TYPE_VNC;
gr->data.vnc.port = port;
gr->data.vnc.keymap = NULL;
- gr->data.vnc.socket = NULL;
gr->data.vnc.auth.passwd = NULL;
gr->data.vnc.auth.expires = false;
gr->data.vnc.auth.connected = 0;
@@ -2442,13 +2441,6 @@ static int prlsdkCheckGraphicsUnsupportedParams(virDomainDefPtr def)
return -1;
}
- if (gr->data.vnc.socket) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("vz driver doesn't support "
- "VNC graphics over unix sockets."));
- return -1;
- }
-
if (gr->data.vnc.auth.connected == VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_FAIL ||
gr->data.vnc.auth.connected == VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_KEEP) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
diff --git a/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-address.xml b/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-address.xml
new file mode 100644
index 0000000000..a32c20bcdc
--- /dev/null
+++ b/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-address.xml
@@ -0,0 +1,30 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219100
+ 219100
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-socket-mismatch.xml b/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-socket-mismatch.xml
new file mode 100644
index 0000000000..980b64cab5
--- /dev/null
+++ b/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-socket-mismatch.xml
@@ -0,0 +1,30 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219100
+ 219100
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-socket.xml b/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-socket.xml
new file mode 100644
index 0000000000..ea3efca3bb
--- /dev/null
+++ b/tests/genericxml2xmlindata/generic-graphics-vnc-socket-attr-listen-socket.xml
@@ -0,0 +1,30 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219100
+ 219100
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-attr-listen-address.xml b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-attr-listen-address.xml
new file mode 100644
index 0000000000..f205e13125
--- /dev/null
+++ b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-attr-listen-address.xml
@@ -0,0 +1,30 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219100
+ 219100
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-attr-listen-socket.xml b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-attr-listen-socket.xml
new file mode 100644
index 0000000000..f205e13125
--- /dev/null
+++ b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-attr-listen-socket.xml
@@ -0,0 +1,30 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219100
+ 219100
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-listen.xml b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-listen.xml
index d8742c6e9f..cb4e5ac8d3 100644
--- a/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-listen.xml
+++ b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket-listen.xml
@@ -19,7 +19,9 @@
-
+
+
+
diff --git a/tests/genericxml2xmloutdata/generic-graphics-vnc-socket.xml b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket.xml
index d8742c6e9f..cb4e5ac8d3 100644
--- a/tests/genericxml2xmloutdata/generic-graphics-vnc-socket.xml
+++ b/tests/genericxml2xmloutdata/generic-graphics-vnc-socket.xml
@@ -19,7 +19,9 @@
-
+
+
+
diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c
index a2ea917984..d492fb4742 100644
--- a/tests/genericxml2xmltest.c
+++ b/tests/genericxml2xmltest.c
@@ -87,6 +87,10 @@ mymain(void)
DO_TEST_DIFFERENT("graphics-vnc-listen-attr-only");
DO_TEST_DIFFERENT("graphics-vnc-listen-element-minimal");
DO_TEST_DIFFERENT("graphics-vnc-listen-element-with-address");
+ DO_TEST_DIFFERENT("graphics-vnc-socket-attr-listen-address");
+ DO_TEST_DIFFERENT("graphics-vnc-socket-attr-listen-socket");
+ DO_TEST_FULL("graphics-vnc-socket-attr-listen-socket-mismatch", 0, false,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
DO_TEST_FULL("name-slash-parse", 0, false,
TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
diff --git a/tests/qemuargv2xmldata/qemuargv2xml-graphics-vnc-socket.xml b/tests/qemuargv2xmldata/qemuargv2xml-graphics-vnc-socket.xml
index edbaab3ad8..efd2601408 100644
--- a/tests/qemuargv2xmldata/qemuargv2xml-graphics-vnc-socket.xml
+++ b/tests/qemuargv2xmldata/qemuargv2xml-graphics-vnc-socket.xml
@@ -29,7 +29,9 @@
-
+
+
+