- util: json: Increase JSON nesting limit when parsing to 300 (RHEL-135128) - virjsontest: Add test for nesting depth (RHEL-135128) - qemu_validate: Drop VIR_DOMAIN_HYPERV_SYNIC dependency on VIR_DOMAIN_HYPERV_VPINDEX (RHEL-138689) - qemu_validate: Drop VIR_DOMAIN_HYPERV_STIMER dependency on VIR_DOMAIN_HYPERV_VPINDEX (RHEL-138689) - esx_util: Introduce esxUtil_EscapeInventoryObject() (RHEL-134127) - esx: URI encode inventory objects twice (RHEL-134127) Resolves: RHEL-134127, RHEL-135128, RHEL-138689
60 lines
2.7 KiB
Diff
60 lines
2.7 KiB
Diff
From 0431af4412aab6aadcde893a7eacf1ae24771590 Mon Sep 17 00:00:00 2001
|
|
Message-ID: <0431af4412aab6aadcde893a7eacf1ae24771590.1768317034.git.jdenemar@redhat.com>
|
|
From: Michal Privoznik <mprivozn@redhat.com>
|
|
Date: Tue, 6 Jan 2026 17:18:03 +0100
|
|
Subject: [PATCH] esx: URI encode inventory objects twice
|
|
|
|
While discouraged by a KB article to use special characters in
|
|
inventory object names [1], ESX won't stop you. And thus users
|
|
can end up with a datastore named "datastore2+", for instance.
|
|
The datastore name (and datacenter path) are important when
|
|
fetching/uploading a .vmx file (used in APIs like
|
|
virDomainGetXMLDesc() or virDomainDefineXML()). And while we do
|
|
URI encode both (dcPath and dsName), encoding them once is not
|
|
enough. Cole Robinson discovered [2] that they need to be
|
|
URI-encoded twice. Use newly introduced
|
|
esxUtil_EscapeInventoryObject() helper to encode them twice.
|
|
|
|
1: https://knowledge.broadcom.com/external/article/386368/vcenter-inventory-object-name-with-speci.html
|
|
2: https://issues.redhat.com/browse/RHEL-133729#comment-28604072
|
|
Resolves: https://issues.redhat.com/browse/RHEL-134127
|
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
|
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
|
|
(cherry picked from commit 6c9d2591c668732eb05cf17d27c9102ef3d40b39)
|
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
---
|
|
src/esx/esx_driver.c | 8 ++++----
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
|
|
index 9f965811b1..02f30c2b19 100644
|
|
--- a/src/esx/esx_driver.c
|
|
+++ b/src/esx/esx_driver.c
|
|
@@ -2567,9 +2567,9 @@ esxDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
|
|
domain->conn->uri->server, domain->conn->uri->port);
|
|
virBufferURIEncodeString(&buffer, directoryAndFileName);
|
|
virBufferAddLit(&buffer, "?dcPath=");
|
|
- virBufferURIEncodeString(&buffer, priv->primary->datacenterPath);
|
|
+ esxUtil_EscapeInventoryObject(&buffer, priv->primary->datacenterPath);
|
|
virBufferAddLit(&buffer, "&dsName=");
|
|
- virBufferURIEncodeString(&buffer, datastoreName);
|
|
+ esxUtil_EscapeInventoryObject(&buffer, datastoreName);
|
|
|
|
url = virBufferContentAndReset(&buffer);
|
|
|
|
@@ -3002,9 +3002,9 @@ esxDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
|
|
|
|
virBufferURIEncodeString(&buffer, escapedName);
|
|
virBufferAddLit(&buffer, ".vmx?dcPath=");
|
|
- virBufferURIEncodeString(&buffer, priv->primary->datacenterPath);
|
|
+ esxUtil_EscapeInventoryObject(&buffer, priv->primary->datacenterPath);
|
|
virBufferAddLit(&buffer, "&dsName=");
|
|
- virBufferURIEncodeString(&buffer, datastoreName);
|
|
+ esxUtil_EscapeInventoryObject(&buffer, datastoreName);
|
|
|
|
url = virBufferContentAndReset(&buffer);
|
|
|
|
--
|
|
2.52.0
|