From nobody Wed May 14 11:31:13 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1523288760829474.8838774223309; Mon, 9 Apr 2018 08:46:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5BCC785545; Mon, 9 Apr 2018 15:45:59 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2D6A25FCB9; Mon, 9 Apr 2018 15:45:59 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E81E74CA9C; Mon, 9 Apr 2018 15:45:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w39FjvDG032408 for ; Mon, 9 Apr 2018 11:45:57 -0400 Received: by smtp.corp.redhat.com (Postfix) id 59868202699A; Mon, 9 Apr 2018 15:45:57 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.58]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE8DA2024CA7; Mon, 9 Apr 2018 15:45:56 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Mon, 9 Apr 2018 16:45:47 +0100 Message-Id: <20180409154551.22604-5-berrange@redhat.com> In-Reply-To: <20180409154551.22604-1-berrange@redhat.com> References: <20180409154551.22604-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/8] driver: allow drivers to indicate if they permit remote connections X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Mon, 09 Apr 2018 15:45:59 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 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 !=3D NULL from most drivers. Signed-off-by: Daniel P. Berrang=C3=A9 --- src/bhyve/bhyve_driver.c | 4 +--- src/driver.h | 2 ++ src/interface/interface_backend_netcf.c | 5 +---- src/interface/interface_backend_udev.c | 5 +---- src/libvirt.c | 5 +++++ src/libxl/libxl_driver.c | 5 +---- src/lxc/lxc_driver.c | 5 +---- src/network/bridge_driver.c | 5 +---- src/node_device/node_device_driver.c | 4 ---- src/node_device/node_device_hal.c | 1 + src/node_device/node_device_udev.c | 1 + src/nwfilter/nwfilter_driver.c | 5 +---- src/openvz/openvz_driver.c | 5 +---- src/qemu/qemu_driver.c | 7 +------ src/secret/secret_driver.c | 5 +---- src/storage/storage_driver.c | 5 +---- src/test/test_driver.c | 5 +---- src/uml/uml_driver.c | 6 +----- src/vbox/vbox_common.c | 4 ---- src/vbox/vbox_driver.c | 8 +++++--- src/vmware/vmware_driver.c | 5 +---- src/vz/vz_driver.c | 5 +---- 22 files changed, 29 insertions(+), 73 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index a0bc400480..cc1d4ba6fb 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -205,9 +205,6 @@ bhyveConnectOpen(virConnectPtr conn, if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "bhyve")) return VIR_DRV_OPEN_DECLINED; =20 - 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"), @@ -1754,6 +1751,7 @@ static virHypervisorDriver bhyveHypervisorDriver =3D { =20 =20 static virConnectDriver bhyveConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &bhyveHypervisorDriver, }; =20 diff --git a/src/driver.h b/src/driver.h index c86da85481..5fb0b523c8 100644 --- a/src/driver.h +++ b/src/driver.h @@ -79,6 +79,8 @@ typedef struct _virConnectDriver virConnectDriver; typedef virConnectDriver *virConnectDriverPtr; =20 struct _virConnectDriver { + /* Wether driver permits a server in the URI */ + bool localOnly; virHypervisorDriverPtr hypervisorDriver; virInterfaceDriverPtr interfaceDriver; virNetworkDriverPtr networkDriver; diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interf= ace_backend_netcf.c index fb75a33280..3da958980f 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -167,10 +167,6 @@ netcfConnectOpen(virConnectPtr conn, if (STRNEQ_NULLABLE(conn->uri->scheme, "interface")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("interface state driver is not active")); @@ -1224,6 +1220,7 @@ static virHypervisorDriver interfaceHypervisorDriver = =3D { =20 =20 static virConnectDriver interfaceConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &interfaceHypervisorDriver, .interfaceDriver =3D &interfaceDriver, }; diff --git a/src/interface/interface_backend_udev.c b/src/interface/interfa= ce_backend_udev.c index 47e850bc2a..2b8a9da682 100644 --- a/src/interface/interface_backend_udev.c +++ b/src/interface/interface_backend_udev.c @@ -1211,10 +1211,6 @@ udevConnectOpen(virConnectPtr conn, if (STRNEQ_NULLABLE(conn->uri->scheme, "interface")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("interface state driver is not active")); @@ -1295,6 +1291,7 @@ static virHypervisorDriver udevHypervisorDriver =3D { =20 =20 static virConnectDriver udevConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &udevHypervisorDriver, .interfaceDriver =3D &udevIfaceDriver, }; diff --git a/src/libvirt.c b/src/libvirt.c index d87efca625..2b2b3ed425 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -1068,6 +1068,11 @@ virConnectOpenInternal(const char *name, VIR_DEBUG("trying driver %zu (%s) ...", i, virConnectDriverTab[i]->hypervisorDriver->name); =20 + if (virConnectDriverTab[i]->localOnly && ret->uri && ret->uri->ser= ver) { + VIR_DEBUG("Server present, skipping local only driver"); + continue; + } + ret->driver =3D virConnectDriverTab[i]->hypervisorDriver; ret->interfaceDriver =3D virConnectDriverTab[i]->interfaceDriver; ret->networkDriver =3D virConnectDriverTab[i]->networkDriver; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index d574fa446e..ce4741cf4c 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -852,10 +852,6 @@ libxlConnectOpen(virConnectPtr conn, if (conn->uri->scheme =3D=3D NULL || STRNEQ(conn->uri->scheme, "xe= n")) return VIR_DRV_OPEN_DECLINED; =20 - /* If server name is given, its for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - /* Error if xen or libxl scheme specified but driver not started. = */ if (libxl_driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -6582,6 +6578,7 @@ static virHypervisorDriver libxlHypervisorDriver =3D { }; =20 static virConnectDriver libxlConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &libxlHypervisorDriver, }; =20 diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 7fbeabc994..7a3e720d16 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -177,10 +177,6 @@ static virDrvOpenStatus lxcConnectOpen(virConnectPtr c= onn, STRNEQ(conn->uri->scheme, "lxc")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - /* If path isn't '/' then they typoed, tell them correct path */ if (conn->uri->path !=3D NULL && STRNEQ(conn->uri->path, "/") && @@ -5633,6 +5629,7 @@ static virHypervisorDriver lxcHypervisorDriver =3D { }; =20 static virConnectDriver lxcConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &lxcHypervisorDriver, }; =20 diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index d326923d81..ca48a0358c 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -886,10 +886,6 @@ networkConnectOpen(virConnectPtr conn, if (STRNEQ_NULLABLE(conn->uri->scheme, "network")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (network_driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("network state driver is not active")); @@ -5616,6 +5612,7 @@ static virHypervisorDriver networkHypervisorDriver = =3D { =20 =20 static virConnectDriver networkConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &networkHypervisorDriver, .networkDriver =3D &networkDriver, }; diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_de= vice_driver.c index 1347ce0c86..ad4938fcd6 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -62,10 +62,6 @@ nodeConnectOpen(virConnectPtr conn, if (STRNEQ_NULLABLE(conn->uri->scheme, "nodedev")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nodedev state driver is not active")); diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_devic= e_hal.c index 6ad56f4166..4c251da88a 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -783,6 +783,7 @@ static virHypervisorDriver halHypervisorDriver =3D { =20 =20 static virConnectDriver halConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &halHypervisorDriver, .nodeDeviceDriver =3D &halNodeDeviceDriver, }; diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_devi= ce_udev.c index e87eb32a85..d89b5ff7cc 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1957,6 +1957,7 @@ static virHypervisorDriver udevHypervisorDriver =3D { =20 =20 static virConnectDriver udevConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &udevHypervisorDriver, .nodeDeviceDriver =3D &udevNodeDeviceDriver, }; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 6cc7ca699a..71aca5a968 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -379,10 +379,6 @@ nwfilterConnectOpen(virConnectPtr conn, if (STRNEQ_NULLABLE(conn->uri->scheme, "nwfilter")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nwfilter state driver is not active")); @@ -712,6 +708,7 @@ static virHypervisorDriver nwfilterHypervisorDriver =3D= { =20 =20 static virConnectDriver nwfilterConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &nwfilterHypervisorDriver, .nwfilterDriver =3D &nwfilterDriver, }; diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index f30db8eec3..a56476475e 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -1451,10 +1451,6 @@ static virDrvOpenStatus openvzConnectOpen(virConnect= Ptr conn, STRNEQ(conn->uri->scheme, "openvz")) return VIR_DRV_OPEN_DECLINED; =20 - /* If server name is given, its for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - /* If path isn't /system, then they typoed, so tell them correct p= ath */ if (conn->uri->path =3D=3D NULL || STRNEQ(conn->uri->path, "/system")) { @@ -2659,6 +2655,7 @@ static virHypervisorDriver openvzHypervisorDriver =3D= { }; =20 static virConnectDriver openvzConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &openvzHypervisorDriver, }; =20 diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 99ec51f304..ef890916dc 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1153,12 +1153,6 @@ static virDrvOpenStatus qemuConnectOpen(virConnectPt= r conn, goto cleanup; } =20 - /* Allow remote driver to deal with URIs with hostname server */ - if (conn->uri->server !=3D NULL) { - ret =3D VIR_DRV_OPEN_DECLINED; - goto cleanup; - } - if (qemu_driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("qemu state driver is not active")); @@ -21573,6 +21567,7 @@ static virHypervisorDriver qemuHypervisorDriver =3D= { =20 =20 static virConnectDriver qemuConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &qemuHypervisorDriver, }; =20 diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c index 23a3c9bdad..06d116f07f 100644 --- a/src/secret/secret_driver.c +++ b/src/secret/secret_driver.c @@ -532,10 +532,6 @@ secretConnectOpen(virConnectPtr conn, if (STRNEQ_NULLABLE(conn->uri->scheme, "secret")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("secret state driver is not active")); @@ -662,6 +658,7 @@ static virHypervisorDriver secretHypervisorDriver =3D { =20 =20 static virConnectDriver secretConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &secretHypervisorDriver, .secretDriver =3D &secretDriver, }; diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 173b91b61b..7eb5fad929 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -392,10 +392,6 @@ storageConnectOpen(virConnectPtr conn, if (STRNEQ_NULLABLE(conn->uri->scheme, "storage")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (driver =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("storage state driver is not active")); @@ -2855,6 +2851,7 @@ static virHypervisorDriver storageHypervisorDriver = =3D { }; =20 static virConnectDriver storageConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &storageHypervisorDriver, .storageDriver =3D &storageDriver, }; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 856869c9d3..de3943406e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -1460,10 +1460,6 @@ testConnectOpen(virConnectPtr conn, if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "test")) return VIR_DRV_OPEN_DECLINED; =20 - /* 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] =3D=3D '\0' @@ -7065,6 +7061,7 @@ static virNodeDeviceDriver testNodeDeviceDriver =3D { }; =20 static virConnectDriver testConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &testHypervisorDriver, .interfaceDriver =3D &testInterfaceDriver, .networkDriver =3D &testNetworkDriver, diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 63350908dd..7fae561aff 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -1210,11 +1210,6 @@ static virDrvOpenStatus umlConnectOpen(virConnectPtr= conn, STRNEQ(conn->uri->scheme, "uml")) return VIR_DRV_OPEN_DECLINED; =20 - /* Allow remote driver to deal with URIs with hostname server */ - if (conn->uri->server !=3D 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 =3D { }; =20 static virConnectDriver umlConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D ¨HypervisorDriver, }; =20 diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index ef71e650c6..886b41b0b9 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -524,10 +524,6 @@ vboxConnectOpen(virConnectPtr conn, STRNEQ(conn->uri->scheme, "vbox")) return VIR_DRV_OPEN_DECLINED; =20 - /* Leave for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - if (conn->uri->path =3D=3D NULL || STREQ(conn->uri->path, "")) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no VirtualBox driver path specified (try vbox://= /session)")); diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c index c10c0c492b..e3880b4826 100644 --- a/src/vbox/vbox_driver.c +++ b/src/vbox/vbox_driver.c @@ -60,8 +60,7 @@ static virDrvOpenStatus dummyConnectOpen(virConnectPtr co= nn, =20 if (conn->uri =3D=3D NULL || conn->uri->scheme =3D=3D NULL || - STRNEQ(conn->uri->scheme, "vbox") || - conn->uri->server !=3D NULL) + STRNEQ(conn->uri->scheme, "vbox")) return VIR_DRV_OPEN_DECLINED; =20 if (conn->uri->path =3D=3D NULL || STREQ(conn->uri->path, "")) { @@ -95,7 +94,10 @@ static virHypervisorDriver vboxDriverDummy =3D { .connectOpen =3D dummyConnectOpen, /* 0.6.3 */ }; =20 -static virConnectDriver vboxConnectDriver; +static virConnectDriver vboxConnectDriver =3D { + .localOnly =3D true, + .hypervisorDriver =3D NULL, +}; =20 int vboxRegister(void) { diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index 8b487c4a7c..435b9ee6ff 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -140,10 +140,6 @@ vmwareConnectOpen(virConnectPtr conn, STRNEQ(conn->uri->scheme, "vmwarefusion"))) return VIR_DRV_OPEN_DECLINED; =20 - /* If server name is given, its for remote driver */ - if (conn->uri->server !=3D NULL) - return VIR_DRV_OPEN_DECLINED; - /* If path isn't /session, then they typoed, so tell them correct = path */ if (conn->uri->path =3D=3D NULL || STRNEQ(conn->uri->path, "/sessi= on")) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -1271,6 +1267,7 @@ static virHypervisorDriver vmwareHypervisorDriver =3D= { }; =20 static virConnectDriver vmwareConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &vmwareHypervisorDriver, }; =20 diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index a425bc8552..8842056ea4 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -374,10 +374,6 @@ vzConnectOpen(virConnectPtr conn, if (STREQ(conn->uri->scheme, "parallels") && STRNEQ(conn->driver->name= , "Parallels")) return VIR_DRV_OPEN_DECLINED; =20 - /* 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 =3D { }; =20 static virConnectDriver vzConnectDriver =3D { + .localOnly =3D true, .hypervisorDriver =3D &vzHypervisorDriver, }; =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list