diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4853f74189..88e8d9f66f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4300,6 +4300,14 @@ virDomainDefPostParseCheckFeatures(virDomainDefPtr def, if (UNSUPPORTED(VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN)) virDomainDefRemoveOfflineVcpuPin(def); + if (UNSUPPORTED(VIR_DOMAIN_DEF_FEATURE_NAME_SLASH)) { + if (def->name && strchr(def->name, '/')) { + virReportError(VIR_ERR_XML_ERROR, + _("name %s cannot contain '/'"), def->name); + return -1; + } + } + return 0; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 2cb9fa305d..9f880b89e3 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2444,6 +2444,7 @@ typedef enum { VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI = (1 << 0), VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG = (1 << 1), VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN = (1 << 2), + VIR_DOMAIN_DEF_FEATURE_NAME_SLASH = (1 << 3), } virDomainDefFeatures; diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index e154a0f795..a7474ff9fe 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -128,8 +128,9 @@ openvzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, virDomainDefParserConfig openvzDomainDefParserConfig = { - .domainPostParseCallback = openvzDomainDefPostParse, - .devicesPostParseCallback = openvzDomainDeviceDefPostParse, + .domainPostParseCallback = openvzDomainDefPostParse, + .devicesPostParseCallback = openvzDomainDeviceDefPostParse, + .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH, }; diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index 55a63e7130..da876865d5 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -1117,6 +1117,7 @@ phypDomainDeviceDefPostParse(virDomainDeviceDefPtr dev ATTRIBUTE_UNUSED, virDomainDefParserConfig virPhypDriverDomainDefParserConfig = { .devicesPostParseCallback = phypDomainDeviceDefPostParse, .domainPostParseCallback = phypDomainDefPostParse, + .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH, }; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index ab2297bd37..ed22724779 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -273,6 +273,7 @@ static virDomainDefParserConfig vboxDomainDefParserConfig = { .macPrefix = { 0x08, 0x00, 0x27 }, .devicesPostParseCallback = vboxDomainDeviceDefPostParse, .domainPostParseCallback = vboxDomainDefPostParse, + .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH, }; static virDomainXMLOptionPtr diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 8c4b4bbc65..5e57c3902e 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -547,7 +547,8 @@ static virDomainDefParserConfig virVMXDomainDefParserConfig = { .macPrefix = {0x00, 0x0c, 0x29}, .devicesPostParseCallback = virVMXDomainDevicesDefPostParse, .domainPostParseCallback = virVMXDomainDefPostParse, - .features = VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI, + .features = (VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI | + VIR_DOMAIN_DEF_FEATURE_NAME_SLASH), }; static void diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c index a75a4f7a30..97a1adaa1b 100644 --- a/src/xenapi/xenapi_driver.c +++ b/src/xenapi/xenapi_driver.c @@ -88,6 +88,7 @@ xenapiDomainDefPostParse(virDomainDefPtr def, virDomainDefParserConfig xenapiDomainDefParserConfig = { .devicesPostParseCallback = xenapiDomainDeviceDefPostParse, .domainPostParseCallback = xenapiDomainDefPostParse, + .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH, }; diff --git a/tests/genericxml2xmlindata/generic-name-slash-fail.xml b/tests/genericxml2xmlindata/generic-name-slash-fail.xml new file mode 100644 index 0000000000..4cdb83408f --- /dev/null +++ b/tests/genericxml2xmlindata/generic-name-slash-fail.xml @@ -0,0 +1,17 @@ + + foo/bar + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c index 05563fbfb9..70a5203113 100644 --- a/tests/genericxml2xmltest.c +++ b/tests/genericxml2xmltest.c @@ -81,6 +81,9 @@ mymain(void) DO_TEST_FULL("graphics-listen-back-compat-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); + virObjectUnref(caps); virObjectUnref(xmlopt);