diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index d147b9afce..5de17593c1 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1852,7 +1852,7 @@
- [!#$%&'()*+\-./0-9:>=<?@A-Z\^_`\[\]a-z|~]+
+ "?[!#$%&'()*+\-./0-9:>=<?@A-Z\^_`\[\]a-z|~]+"?
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index d81ed70a97..c43e52d1f6 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2217,6 +2217,10 @@ static const char virStorageSourceCookieNameInvalidChars[] =
static int
virStorageSourceNetCookieValidate(virStorageNetCookieDefPtr def)
{
+ g_autofree char *val = g_strdup(def->value);
+ const char *checkval = val;
+ size_t len = strlen(val);
+
/* name must have at least 1 character */
if (*(def->name) == '\0') {
virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -2233,8 +2237,21 @@ virStorageSourceNetCookieValidate(virStorageNetCookieDefPtr def)
return -1;
}
+ /* check for optional quotes around the cookie value string */
+ if (val[0] == '"') {
+ if (val[len - 1] != '"') {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("value of cookie '%s' contains invalid characters"),
+ def->name);
+ return -1;
+ }
+
+ val[len - 1] = '\0';
+ checkval++;
+ }
+
/* check invalid characters in value */
- if (virStringHasChars(def->value, virStorageSourceCookieValueInvalidChars)) {
+ if (virStringHasChars(checkval, virStorageSourceCookieValueInvalidChars)) {
virReportError(VIR_ERR_XML_ERROR,
_("value of cookie '%s' contains invalid characters"),
def->name);
diff --git a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
index e14498f778..ed44424dc3 100644
--- a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
@@ -43,7 +43,7 @@ id=virtio-disk0,bootindex=1 \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=libvirt-3-format,\
id=virtio-disk1 \
-object secret,id=libvirt-2-storage-httpcookie-secret0,\
-data=DrPR9NA6GKJb7qi1KbjHad3f3UIGTTDmAmOZHHv1F5w5T8rhnk3f+uSKStHe0J2O,\
+data=DrPR9NA6GKJb7qi1KbjHaealKEMVtOWUl2h3yvO5lgIh6cyLHemmlg+h9fcgwREA,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
-blockdev '{"driver":"http","url":"http://example.org:1234/test3.img",\
"cookie-secret":"libvirt-2-storage-httpcookie-secret0",\
@@ -53,7 +53,7 @@ keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=libvirt-2-format,\
id=virtio-disk2 \
-object secret,id=libvirt-1-storage-httpcookie-secret0,\
-data=DrPR9NA6GKJb7qi1KbjHad3f3UIGTTDmAmOZHHv1F5w5T8rhnk3f+uSKStHe0J2O,\
+data=DrPR9NA6GKJb7qi1KbjHaealKEMVtOWUl2h3yvO5lgIh6cyLHemmlg+h9fcgwREA,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
-blockdev '{"driver":"https","url":"https://example.org:1234/test4.img",\
"sslverify":false,"cookie-secret":"libvirt-1-storage-httpcookie-secret0",\
diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
index 20024c732e..93e6617433 100644
--- a/tests/qemuxml2argvdata/disk-network-http.xml
+++ b/tests/qemuxml2argvdata/disk-network-http.xml
@@ -35,7 +35,7 @@
testcookievalue
- blurb
+ "blurb"
@@ -47,7 +47,7 @@
testcookievalue
- blurb
+ "blurb"
diff --git a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
index 9e78785d0d..cf36331286 100644
--- a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
+++ b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
@@ -41,7 +41,7 @@
testcookievalue
- blurb
+ "blurb"
@@ -54,7 +54,7 @@
testcookievalue
- blurb
+ "blurb"