]> xenbits.xensource.com Git - libvirt.git/commitdiff
esx: Report an error for acceptable URI schemes with a transport
authorMatthias Bolte <matthias.bolte@googlemail.com>
Tue, 27 Sep 2011 11:08:09 +0000 (13:08 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Thu, 29 Sep 2011 08:25:08 +0000 (10:25 +0200)
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

index f1102eac32389d2cab24a7791e3038d6b6e932ea..c15c0d69504912007baee0822a4fc4cf32d9782f 100644 (file)
@@ -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",