From 3d308f75c1b16bd48a8aeaa6b1f9893bfeeec2e5 Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Tue, 27 Sep 2011 13:08:09 +0200 Subject: [PATCH] esx: Report an error for acceptable URI schemes with a transport 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 an error in the ESX driver suggesting to try again without the transport part in the scheme. --- src/esx/esx_driver.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index f1102eac32..c15c0d6950 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, + _("Transport '%s' in URI scheme is not supported, try again " + "without the transport part"), plus + 1); + return VIR_DRV_OPEN_ERROR; + } + /* Require server part */ if (conn->uri->server == NULL) { ESX_ERROR(VIR_ERR_INVALID_ARG, "%s", -- GitLab