render / rpms / libvirt

Forked from rpms/libvirt 4 months ago
Clone
d76c62
From a5496b797498dc5393ccbf2775a2947e67a804eb Mon Sep 17 00:00:00 2001
d76c62
Message-Id: <a5496b797498dc5393ccbf2775a2947e67a804eb@dist-git>
d76c62
From: Peter Krempa <pkrempa@redhat.com>
d76c62
Date: Mon, 16 Mar 2020 22:12:08 +0100
d76c62
Subject: [PATCH] virStorageSourceParseBackingJSONUri: Handle undocumented
d76c62
 value 'off' for sslverify
d76c62
MIME-Version: 1.0
d76c62
Content-Type: text/plain; charset=UTF-8
d76c62
Content-Transfer-Encoding: 8bit
d76c62
d76c62
libguestfs abuses a quirk of qemu's parser to accept also other variants
d76c62
of the 'sslverify' field which would be valid on the command line but
d76c62
are not documented in the QMP schema.
d76c62
d76c62
If we encounter the 'off' string instead of an boolean handle it rather
d76c62
than erroring out to continue support of pre-blockdev configurations.
d76c62
d76c62
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
d76c62
Reviewed-by: Ján Tomko <jtomko@redhat.com>
d76c62
(cherry picked from commit 5179cc6b08a06fad92e8674d048fc0327d48f79e)
d76c62
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
d76c62
Message-Id: <8f277a7bede59b7c8b6de9db9c7726b6cbe02192.1584391727.git.pkrempa@redhat.com>
d76c62
Reviewed-by: Ján Tomko <jtomko@redhat.com>
d76c62
---
d76c62
 src/util/virstoragefile.c | 21 ++++++++++++++-------
d76c62
 tests/virstoragetest.c    | 15 +++++++++++++++
d76c62
 2 files changed, 29 insertions(+), 7 deletions(-)
d76c62
d76c62
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
d76c62
index 931f2db6e9..9eca186e99 100644
d76c62
--- a/src/util/virstoragefile.c
d76c62
+++ b/src/util/virstoragefile.c
d76c62
@@ -3278,16 +3278,23 @@ virStorageSourceParseBackingJSONUri(virStorageSourcePtr src,
d76c62
     if (protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
d76c62
         protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
d76c62
         if (virJSONValueObjectHasKey(json, "sslverify")) {
d76c62
+            const char *tmpstr;
d76c62
             bool tmp;
d76c62
 
d76c62
-            if (virJSONValueObjectGetBoolean(json, "sslverify", &tmp) < 0) {
d76c62
-                virReportError(VIR_ERR_INVALID_ARG,
d76c62
-                               _("malformed 'sslverify' field in backing store definition '%s'"),
d76c62
-                               jsonstr);
d76c62
-                return -1;
d76c62
-            }
d76c62
+            /* libguestfs still uses undocumented legacy value of 'off' */
d76c62
+            if ((tmpstr = virJSONValueObjectGetString(json, "sslverify")) &&
d76c62
+                STREQ(tmpstr, "off")) {
d76c62
+                src->sslverify = VIR_TRISTATE_BOOL_NO;
d76c62
+            } else {
d76c62
+                if (virJSONValueObjectGetBoolean(json, "sslverify", &tmp) < 0) {
d76c62
+                    virReportError(VIR_ERR_INVALID_ARG,
d76c62
+                                   _("malformed 'sslverify' field in backing store definition '%s'"),
d76c62
+                                   jsonstr);
d76c62
+                    return -1;
d76c62
+                }
d76c62
 
d76c62
-            src->sslverify = virTristateBoolFromBool(tmp);
d76c62
+                src->sslverify = virTristateBoolFromBool(tmp);
d76c62
+            }
d76c62
         }
d76c62
     }
d76c62
 
d76c62
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
d76c62
index 63b991eb71..ca428f5ca7 100644
d76c62
--- a/tests/virstoragetest.c
d76c62
+++ b/tests/virstoragetest.c
d76c62
@@ -1621,6 +1621,21 @@ mymain(void)
d76c62
                            "  <timeout seconds='2000'/>\n"
d76c62
                            "</source>\n", 0);
d76c62
 
d76c62
+    TEST_BACKING_PARSE_FULL("json:{ \"file.cookie\": \"vmware_soap_session=\\\"0c8db85112873a79b7ef74f294cb70ef7f\\\"\","
d76c62
+                                   "\"file.sslverify\": \"off\","
d76c62
+                                   "\"file.driver\": \"https\","
d76c62
+                                   "\"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\","
d76c62
+                                   "\"file.timeout\": 2000"
d76c62
+                                 "}",
d76c62
+                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk'>\n"
d76c62
+                           "  <host name='host' port='443'/>\n"
d76c62
+                           "  <ssl verify='no'/>\n"
d76c62
+                           "  <cookies>\n"
d76c62
+                           "    <cookie name='vmware_soap_session'>"0c8db85112873a79b7ef74f294cb70ef7f"</cookie>\n"
d76c62
+                           "  </cookies>\n"
d76c62
+                           "  <timeout seconds='2000'/>\n"
d76c62
+                           "</source>\n", 0);
d76c62
+
d76c62
 #endif /* WITH_YAJL */
d76c62
 
d76c62
  cleanup:
d76c62
-- 
d76c62
2.25.1
d76c62