]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virStorageSourceParseBackingJSONUri: Handle undocumented value 'off' for sslverify
authorPeter Krempa <pkrempa@redhat.com>
Fri, 6 Mar 2020 07:29:59 +0000 (08:29 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 16 Mar 2020 14:51:44 +0000 (15:51 +0100)
libguestfs abuses a quirk of qemu's parser to accept also other variants
of the 'sslverify' field which would be valid on the command line but
are not documented in the QMP schema.

If we encounter the 'off' string instead of an boolean handle it rather
than erroring out to continue support of pre-blockdev configurations.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/util/virstoragefile.c
tests/virstoragetest.c

index 019065fd0286b64d2e058821d33ec6f6d54467f3..ab2f0ead5f35eab82c138a437b4fd7db5723eb5f 100644 (file)
@@ -3278,16 +3278,23 @@ virStorageSourceParseBackingJSONUri(virStorageSourcePtr src,
     if (protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
         protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
         if (virJSONValueObjectHasKey(json, "sslverify")) {
+            const char *tmpstr;
             bool tmp;
 
-            if (virJSONValueObjectGetBoolean(json, "sslverify", &tmp) < 0) {
-                virReportError(VIR_ERR_INVALID_ARG,
-                               _("malformed 'sslverify' field in backing store definition '%s'"),
-                               jsonstr);
-                return -1;
-            }
+            /* libguestfs still uses undocumented legacy value of 'off' */
+            if ((tmpstr = virJSONValueObjectGetString(json, "sslverify")) &&
+                STREQ(tmpstr, "off")) {
+                src->sslverify = VIR_TRISTATE_BOOL_NO;
+            } else {
+                if (virJSONValueObjectGetBoolean(json, "sslverify", &tmp) < 0) {
+                    virReportError(VIR_ERR_INVALID_ARG,
+                                   _("malformed 'sslverify' field in backing store definition '%s'"),
+                                   jsonstr);
+                    return -1;
+                }
 
-            src->sslverify = virTristateBoolFromBool(tmp);
+                src->sslverify = virTristateBoolFromBool(tmp);
+            }
         }
     }
 
index b49dfd25980dccc26b838312558a7727b8b57bba..c59511114d96c6f5c94a36da76c8c2a151829cea 100644 (file)
@@ -1622,6 +1622,21 @@ mymain(void)
                            "  <timeout seconds='2000'/>\n"
                            "</source>\n", 0);
 
+    TEST_BACKING_PARSE_FULL("json:{ \"file.cookie\": \"vmware_soap_session=\\\"0c8db85112873a79b7ef74f294cb70ef7f\\\"\","
+                                   "\"file.sslverify\": \"off\","
+                                   "\"file.driver\": \"https\","
+                                   "\"file.url\": \"https://host/folder/esx6.5-rhel7.7-x86%5f64/esx6.5-rhel7.7-x86%5f64-flat.vmdk?dcPath=data&dsName=esx6.5-matrix\","
+                                   "\"file.timeout\": 2000"
+                                 "}",
+                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk'>\n"
+                           "  <host name='host' port='443'/>\n"
+                           "  <ssl verify='no'/>\n"
+                           "  <cookies>\n"
+                           "    <cookie name='vmware_soap_session'>&quot;0c8db85112873a79b7ef74f294cb70ef7f&quot;</cookie>\n"
+                           "  </cookies>\n"
+                           "  <timeout seconds='2000'/>\n"
+                           "</source>\n", 0);
+
 #endif /* WITH_YAJL */
 
  cleanup: