[PATCH 25/30] virStorageSourceParseBackingJSONUri: Handle undocumented value 'off' for sslverify

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 src/util/virstoragefile.c | 21 ++++++++++++++-------
 tests/virstoragetest.c    | 15 +++++++++++++++
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index efc4c60681..a85b95fd09 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -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);
+            }
         }
     }

diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index b49dfd2598..c59511114d 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -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:
-- 
2.24.1





[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux