]> xenbits.xensource.com Git - libvirt.git/commitdiff
driver: allow drivers to indicate if they permit remote connections
authorDaniel P. Berrangé <berrange@redhat.com>
Wed, 28 Mar 2018 09:53:31 +0000 (10:53 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 12 Apr 2018 15:52:02 +0000 (16:52 +0100)
Add a localOnly flag to the virConnectDriver struct which allows a
driver to indicate whether it is local-only, or permits remote
connections. Stateful drivers running inside libvirtd are generally
local only. This allows us to remote the check for uri->server != NULL
from most drivers.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
23 files changed:
src/bhyve/bhyve_driver.c
src/check-aclrules.pl
src/driver.h
src/interface/interface_backend_netcf.c
src/interface/interface_backend_udev.c
src/libvirt.c
src/libxl/libxl_driver.c
src/lxc/lxc_driver.c
src/network/bridge_driver.c
src/node_device/node_device_driver.c
src/node_device/node_device_hal.c
src/node_device/node_device_udev.c
src/nwfilter/nwfilter_driver.c
src/openvz/openvz_driver.c
src/qemu/qemu_driver.c
src/secret/secret_driver.c
src/storage/storage_driver.c
src/test/test_driver.c
src/uml/uml_driver.c
src/vbox/vbox_common.c
src/vbox/vbox_driver.c
src/vmware/vmware_driver.c
src/vz/vz_driver.c

index 084f782f9e535fef02e83e92b50ae6fbda3cf829..2e815ca70e8f475fea3d78f787926a33d932f4ae 100644 (file)
@@ -205,9 +205,6 @@ bhyveConnectOpen(virConnectPtr conn,
          if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "bhyve"))
              return VIR_DRV_OPEN_DECLINED;
 
-         if (conn->uri->server)
-             return VIR_DRV_OPEN_DECLINED;
-
          if (STRNEQ_NULLABLE(conn->uri->path, "/system")) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("Unexpected bhyve URI path '%s', try bhyve:///system"),
@@ -1738,6 +1735,7 @@ static virHypervisorDriver bhyveHypervisorDriver = {
 
 
 static virConnectDriver bhyveConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &bhyveHypervisorDriver,
 };
 
index 8b146d8dba82692ce362417a25c545d98ad48343..14532e7a2d7ca27f0f9d56fc9b5bfa986e5f3322 100755 (executable)
@@ -60,6 +60,7 @@ my %whitelist = (
     "interfaceOpen" => 1,
     "interfaceClose" => 1,
     "connectURIProbe" => 1,
+    "localOnly" => 1,
     );
 
 # Temp hack - remove it once xen driver is fixed
index c86da85481acf6ea8697497c723373f85c1318cf..5fb0b523c89e8bf317f86c8f7fd0b824ed895f7f 100644 (file)
@@ -79,6 +79,8 @@ typedef struct _virConnectDriver virConnectDriver;
 typedef virConnectDriver *virConnectDriverPtr;
 
 struct _virConnectDriver {
+    /* Wether driver permits a server in the URI */
+    bool localOnly;
     virHypervisorDriverPtr hypervisorDriver;
     virInterfaceDriverPtr interfaceDriver;
     virNetworkDriverPtr networkDriver;
index fb75a3328008240b9607a8734f003c36cea6874e..3da958980fa5bb0a9e7996586f9a92ddcc8c445f 100644 (file)
@@ -167,10 +167,6 @@ netcfConnectOpen(virConnectPtr conn,
         if (STRNEQ_NULLABLE(conn->uri->scheme, "interface"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         if (driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("interface state driver is not active"));
@@ -1224,6 +1220,7 @@ static virHypervisorDriver interfaceHypervisorDriver = {
 
 
 static virConnectDriver interfaceConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &interfaceHypervisorDriver,
     .interfaceDriver = &interfaceDriver,
 };
index 47e850bc2aabb49fe7917cc0c48320e3a13259bf..2b8a9da6822f994babd3449866de1468f5eb8817 100644 (file)
@@ -1211,10 +1211,6 @@ udevConnectOpen(virConnectPtr conn,
         if (STRNEQ_NULLABLE(conn->uri->scheme, "interface"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         if (driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("interface state driver is not active"));
@@ -1295,6 +1291,7 @@ static virHypervisorDriver udevHypervisorDriver = {
 
 
 static virConnectDriver udevConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &udevHypervisorDriver,
     .interfaceDriver = &udevIfaceDriver,
 };
index d87efca6254627e734aa19defff4237ee8bb0dc5..2b2b3ed4254c60d276d327e1086ca91bc0c919da 100644 (file)
@@ -1068,6 +1068,11 @@ virConnectOpenInternal(const char *name,
         VIR_DEBUG("trying driver %zu (%s) ...",
                   i, virConnectDriverTab[i]->hypervisorDriver->name);
 
+        if (virConnectDriverTab[i]->localOnly && ret->uri && ret->uri->server) {
+            VIR_DEBUG("Server present, skipping local only driver");
+            continue;
+        }
+
         ret->driver = virConnectDriverTab[i]->hypervisorDriver;
         ret->interfaceDriver = virConnectDriverTab[i]->interfaceDriver;
         ret->networkDriver = virConnectDriverTab[i]->networkDriver;
index d574fa446e1e3ced04b4834e6b4127735ba35743..ce4741cf4c12e82744c35f02357c0f3b5d7eee48 100644 (file)
@@ -852,10 +852,6 @@ libxlConnectOpen(virConnectPtr conn,
         if (conn->uri->scheme == NULL || STRNEQ(conn->uri->scheme, "xen"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* If server name is given, its for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         /* Error if xen or libxl scheme specified but driver not started. */
         if (libxl_driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -6582,6 +6578,7 @@ static virHypervisorDriver libxlHypervisorDriver = {
 };
 
 static virConnectDriver libxlConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &libxlHypervisorDriver,
 };
 
index 0bfa417ef2157c18c0c99fb06fcb9fa77480bac5..97742bfba797f095c502d20b17675d7afe0f1b2e 100644 (file)
@@ -177,10 +177,6 @@ static virDrvOpenStatus lxcConnectOpen(virConnectPtr conn,
             STRNEQ(conn->uri->scheme, "lxc"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         /* If path isn't '/' then they typoed, tell them correct path */
         if (conn->uri->path != NULL &&
             STRNEQ(conn->uri->path, "/") &&
@@ -5637,6 +5633,7 @@ static virHypervisorDriver lxcHypervisorDriver = {
 };
 
 static virConnectDriver lxcConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &lxcHypervisorDriver,
 };
 
index d326923d8135e3711dc54b8ab2a2f5cd6d01e784..ca48a0358c45585146695f636fe2fac7501dd199 100644 (file)
@@ -886,10 +886,6 @@ networkConnectOpen(virConnectPtr conn,
         if (STRNEQ_NULLABLE(conn->uri->scheme, "network"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         if (network_driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("network state driver is not active"));
@@ -5616,6 +5612,7 @@ static virHypervisorDriver networkHypervisorDriver = {
 
 
 static virConnectDriver networkConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &networkHypervisorDriver,
     .networkDriver = &networkDriver,
 };
index 1347ce0c86b19befcb7dbd9028d7d4bfca78e3ee..ad4938fcd6bd39d8adfe43453f38a241ff858cc6 100644 (file)
@@ -62,10 +62,6 @@ nodeConnectOpen(virConnectPtr conn,
         if (STRNEQ_NULLABLE(conn->uri->scheme, "nodedev"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         if (driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("nodedev state driver is not active"));
index 6ad56f41665ba1394446823e73ce8b971e86c74f..4c251da88ab26d14d6d6f68345fd4f5e6517127f 100644 (file)
@@ -783,6 +783,7 @@ static virHypervisorDriver halHypervisorDriver = {
 
 
 static virConnectDriver halConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &halHypervisorDriver,
     .nodeDeviceDriver = &halNodeDeviceDriver,
 };
index e87eb32a85ac2429abad917de47788fe02df8359..d89b5ff7cc854cb3598c8f062bb8d4f88fe48c91 100644 (file)
@@ -1957,6 +1957,7 @@ static virHypervisorDriver udevHypervisorDriver = {
 
 
 static virConnectDriver udevConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &udevHypervisorDriver,
     .nodeDeviceDriver = &udevNodeDeviceDriver,
 };
index 6cc7ca699a23f3610a5daec45547686990d1a05d..71aca5a9686ed54f505b7071fd04aaf3ee108fda 100644 (file)
@@ -379,10 +379,6 @@ nwfilterConnectOpen(virConnectPtr conn,
         if (STRNEQ_NULLABLE(conn->uri->scheme, "nwfilter"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         if (driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("nwfilter state driver is not active"));
@@ -712,6 +708,7 @@ static virHypervisorDriver nwfilterHypervisorDriver = {
 
 
 static virConnectDriver nwfilterConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &nwfilterHypervisorDriver,
     .nwfilterDriver = &nwfilterDriver,
 };
index 4b458bf6fc2fba7493a19d90d188f7054e395624..339f88994c36e6a21ba13dd01b7abe6254132a97 100644 (file)
@@ -1362,10 +1362,6 @@ static virDrvOpenStatus openvzConnectOpen(virConnectPtr conn,
             STRNEQ(conn->uri->scheme, "openvz"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* If server name is given, its for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         /* If path isn't /system, then they typoed, so tell them correct path */
         if (conn->uri->path == NULL ||
             STRNEQ(conn->uri->path, "/system")) {
@@ -2524,6 +2520,7 @@ static virHypervisorDriver openvzHypervisorDriver = {
 };
 
 static virConnectDriver openvzConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &openvzHypervisorDriver,
 };
 
index 214584992224032a38f1fd4c72a21352fd58f145..ca08ba463d173afda86574bc7ecfb390079e2c21 100644 (file)
@@ -1153,12 +1153,6 @@ static virDrvOpenStatus qemuConnectOpen(virConnectPtr conn,
             goto cleanup;
         }
 
-        /* Allow remote driver to deal with URIs with hostname server */
-        if (conn->uri->server != NULL) {
-            ret = VIR_DRV_OPEN_DECLINED;
-            goto cleanup;
-        }
-
         if (qemu_driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("qemu state driver is not active"));
@@ -21569,6 +21563,7 @@ static virHypervisorDriver qemuHypervisorDriver = {
 
 
 static virConnectDriver qemuConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &qemuHypervisorDriver,
 };
 
index 23a3c9bdadabac5ed4f594e2fa39219e8de0456d..06d116f07f5acc895686db6ae8c6b8b8863c4707 100644 (file)
@@ -532,10 +532,6 @@ secretConnectOpen(virConnectPtr conn,
         if (STRNEQ_NULLABLE(conn->uri->scheme, "secret"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         if (driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("secret state driver is not active"));
@@ -662,6 +658,7 @@ static virHypervisorDriver secretHypervisorDriver = {
 
 
 static virConnectDriver secretConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &secretHypervisorDriver,
     .secretDriver = &secretDriver,
 };
index 173b91b61b11b6c965fb04de1db15c2f9110d780..7eb5fad929ff8b93643ce3186544877e652f33de 100644 (file)
@@ -392,10 +392,6 @@ storageConnectOpen(virConnectPtr conn,
         if (STRNEQ_NULLABLE(conn->uri->scheme, "storage"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Leave for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         if (driver == NULL) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("storage state driver is not active"));
@@ -2855,6 +2851,7 @@ static virHypervisorDriver storageHypervisorDriver = {
 };
 
 static virConnectDriver storageConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &storageHypervisorDriver,
     .storageDriver = &storageDriver,
 };
index 856869c9d3a9417265c6554a4745c5009d33a005..de3943406e0e0c6d5337d636c15442c71a2817df 100644 (file)
@@ -1460,10 +1460,6 @@ testConnectOpen(virConnectPtr conn,
     if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "test"))
         return VIR_DRV_OPEN_DECLINED;
 
-    /* Remote driver should handle these. */
-    if (conn->uri->server)
-        return VIR_DRV_OPEN_DECLINED;
-
     /* From this point on, the connection is for us. */
     if (!conn->uri->path
         || conn->uri->path[0] == '\0'
@@ -7065,6 +7061,7 @@ static virNodeDeviceDriver testNodeDeviceDriver = {
 };
 
 static virConnectDriver testConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &testHypervisorDriver,
     .interfaceDriver = &testInterfaceDriver,
     .networkDriver = &testNetworkDriver,
index 63350908ddde73b46b75adc1b53751bdd4d93a96..7fae561affb882c0348da1a4b9c2a8d8805e1781 100644 (file)
@@ -1210,11 +1210,6 @@ static virDrvOpenStatus umlConnectOpen(virConnectPtr conn,
             STRNEQ(conn->uri->scheme, "uml"))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* Allow remote driver to deal with URIs with hostname server */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
-
         /* Check path and tell them correct path if they made a mistake */
         if (uml_driver->privileged) {
             if (STRNEQ(conn->uri->path, "/system") &&
@@ -3018,6 +3013,7 @@ static virHypervisorDriver umlHypervisorDriver = {
 };
 
 static virConnectDriver umlConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &umlHypervisorDriver,
 };
 
index b86a0b28dc7c9e856f920f06c2d85639f8996ec7..204f08ea8a3e10a524d510546e12678f8ea1b2a4 100644 (file)
@@ -524,10 +524,6 @@ vboxConnectOpen(virConnectPtr conn,
         STRNEQ(conn->uri->scheme, "vbox"))
         return VIR_DRV_OPEN_DECLINED;
 
-    /* Leave for remote driver */
-    if (conn->uri->server != NULL)
-        return VIR_DRV_OPEN_DECLINED;
-
     if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("no VirtualBox driver path specified (try vbox:///session)"));
index c10c0c492b54f858649b213e1bb5dc630de8196b..e3880b4826b758137c86c5e8c671a3f393a8a315 100644 (file)
@@ -60,8 +60,7 @@ static virDrvOpenStatus dummyConnectOpen(virConnectPtr conn,
 
     if (conn->uri == NULL ||
         conn->uri->scheme == NULL ||
-        STRNEQ(conn->uri->scheme, "vbox") ||
-        conn->uri->server != NULL)
+        STRNEQ(conn->uri->scheme, "vbox"))
         return VIR_DRV_OPEN_DECLINED;
 
     if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) {
@@ -95,7 +94,10 @@ static virHypervisorDriver vboxDriverDummy = {
     .connectOpen = dummyConnectOpen, /* 0.6.3 */
 };
 
-static virConnectDriver vboxConnectDriver;
+static virConnectDriver vboxConnectDriver = {
+    .localOnly = true,
+    .hypervisorDriver = NULL,
+};
 
 int vboxRegister(void)
 {
index 8b487c4a7ce034c433b2544aced5d19c93280f66..435b9ee6ff9cc16928925728744b0d9b42a2672d 100644 (file)
@@ -140,10 +140,6 @@ vmwareConnectOpen(virConnectPtr conn,
              STRNEQ(conn->uri->scheme, "vmwarefusion")))
             return VIR_DRV_OPEN_DECLINED;
 
-        /* If server name is given, its for remote driver */
-        if (conn->uri->server != NULL)
-            return VIR_DRV_OPEN_DECLINED;
-
         /* If path isn't /session, then they typoed, so tell them correct path */
         if (conn->uri->path == NULL || STRNEQ(conn->uri->path, "/session")) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -1271,6 +1267,7 @@ static virHypervisorDriver vmwareHypervisorDriver = {
 };
 
 static virConnectDriver vmwareConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &vmwareHypervisorDriver,
 };
 
index a425bc85529d1cc8e84b24180cc69c63d28c0032..8842056ea4feda818d1b441bf5081009fda792cd 100644 (file)
@@ -374,10 +374,6 @@ vzConnectOpen(virConnectPtr conn,
     if (STREQ(conn->uri->scheme, "parallels") && STRNEQ(conn->driver->name, "Parallels"))
         return VIR_DRV_OPEN_DECLINED;
 
-    /* Remote driver should handle these. */
-    if (conn->uri->server)
-        return VIR_DRV_OPEN_DECLINED;
-
     /* From this point on, the connection is for us. */
     if (STRNEQ_NULLABLE(conn->uri->path, "/system")) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -4143,6 +4139,7 @@ static virHypervisorDriver vzHypervisorDriver = {
 };
 
 static virConnectDriver vzConnectDriver = {
+    .localOnly = true,
     .hypervisorDriver = &vzHypervisorDriver,
 };