Before, URIs such as esx+ssh:// have been declined by the ESX driver
resulting in the remote driver trying to connect to an non-existing
libvirtd.
Now such URIs trigger and error in the ESX driver suggesting to try
again without the transport part in the scheme.
---
src/esx/esx_driver.c | 31 ++++++++++++++++++++++++++-----
1 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index f1102ea..c81eca8 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -938,20 +938,41 @@ esxOpen(virConnectPtr conn, virConnectAuthPtr auth,
unsigned int flags)
{
virDrvOpenStatus result = VIR_DRV_OPEN_ERROR;
+ char *plus;
esxPrivate *priv = NULL;
char *potentialVCenterIpAddress = NULL;
char vCenterIpAddress[NI_MAXHOST] = "";
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
- /* Decline if the URI is NULL or the scheme is not one of {vpx|esx|gsx} */
- if (conn->uri == NULL || conn->uri->scheme == NULL ||
- (STRCASENEQ(conn->uri->scheme, "vpx") &&
- STRCASENEQ(conn->uri->scheme, "esx") &&
- STRCASENEQ(conn->uri->scheme, "gsx"))) {
+ /* Decline if the URI is NULL or the scheme is NULL */
+ if (conn->uri == NULL || conn->uri->scheme == NULL) {
return VIR_DRV_OPEN_DECLINED;
}
+ /* Decline if the scheme is not one of {vpx|esx|gsx} */
+ plus = strchr(conn->uri->scheme, '+');
+
+ if (plus == NULL) {
+ if (STRCASENEQ(conn->uri->scheme, "vpx") &&
+ STRCASENEQ(conn->uri->scheme, "esx") &&
+ STRCASENEQ(conn->uri->scheme, "gsx")) {
+ return VIR_DRV_OPEN_DECLINED;
+ }
+ } else {
+ if (plus - conn->uri->scheme != 3 ||
+ (STRCASENEQLEN(conn->uri->scheme, "vpx", 3) &&
+ STRCASENEQLEN(conn->uri->scheme, "esx", 3) &&
+ STRCASENEQLEN(conn->uri->scheme, "gsx", 3))) {
+ return VIR_DRV_OPEN_DECLINED;
+ }
+
+ ESX_ERROR(VIR_ERR_INVALID_ARG, "%s",
+ _("Transport in URI scheme is not supported, try again "
+ "without the transport part"));
+ return VIR_DRV_OPEN_ERROR;
+ }
+
/* Require server part */
if (conn->uri->server == NULL) {
ESX_ERROR(VIR_ERR_INVALID_ARG, "%s",
--
1.7.4.1