On Wed, Apr 11, 2018 at 02:08:51PM +0200, Michal Privoznik wrote:
On 04/09/2018 05:45 PM, Daniel P. Berrangé wrote:
> Currently the virDrvConnectOpen method is supposed to handle both
> opening an explicit URI and auto-probing a driver if no URI is
> given. Introduce a dedicated virDrvConnectURIProbe method to enable the
> probing functionality to be split from the driver opening functionality.
>
> It is still possible for NULL to be passed to the virDrvConnectOpen
> method after this change, because the remote driver needs special
> handling to enable probing of the URI against a remote libvirtd daemon.
>
> Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
> ---
> docs/hvsupport.pl | 6 +++---
> src/bhyve/bhyve_driver.c | 18 +++++++++++++-----
> src/driver-hypervisor.h | 4 ++++
> src/libvirt.c | 13 +++++++++++++
> src/libxl/libxl_driver.c | 17 ++++++++++++-----
> src/lxc/lxc_driver.c | 17 ++++++++++++-----
> src/openvz/openvz_driver.c | 24 ++++++++++++++++--------
> src/qemu/qemu_driver.c | 30 +++++++++++++++++++++---------
> src/uml/uml_driver.c | 20 +++++++++++++-------
> src/vbox/vbox_common.c | 13 ++++++++++---
> 10 files changed, 117 insertions(+), 45 deletions(-)
>
> diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl
> index fc6eb1f152..a2b980c502 100755
> --- a/docs/hvsupport.pl
> +++ b/docs/hvsupport.pl
> @@ -184,7 +184,7 @@ foreach my $drivertable (@drivertable) {
> my $api;
> if (exists $apis{"vir$name"}) {
> $api = "vir$name";
> - } elsif ($name =~ /\w+(Open|Close)/) {
> + } elsif ($name =~ /\w+(Open|Close|URIProbe)/) {
> next;
> } else {
> die "driver $name does not have a public API";
> @@ -241,12 +241,12 @@ foreach my $src (@srcs) {
>
> next if $api eq "no" || $api eq "name";
>
> - die "Method $meth in $src is missing version" unless
defined $vers;
> + die "Method $meth in $src is missing version" unless
defined $vers || $api eq "connectURIProbe";
>
> die "Driver method for $api is NULL in $src" if $meth eq
"NULL";
>
> if (!exists($groups{$ingrp}->{apis}->{$api})) {
> - next if $api =~ /\w(Open|Close)/;
> + next if $api =~ /\w(Open|Close|URIProbe)/;
>
> die "Found unexpected method $api in $ingrp\n";
> }
> diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
> index 849d3abcd3..a0bc400480 100644
> --- a/src/bhyve/bhyve_driver.c
> +++ b/src/bhyve/bhyve_driver.c
> @@ -180,6 +180,17 @@ bhyveDomObjFromDomain(virDomainPtr domain)
> return vm;
> }
>
> +
> +static int
> +bhyveConnectURIProbe(char **uri)
> +{
> + if (bhyve_driver == NULL)
> + return 0;
> +
> + return VIR_STRDUP(*uri, "bhyve:///system");
> +}
make check fails because it thinks this function (and others) is missing
ACL check.
IMHO, we don't need ACLs on this. This isn't doing anything functional,
and the caller will trigger the .connectOpen method next which already
has an ACL check. So I think we just whitelist it
diff --git a/src/check-aclrules.pl b/src/check-aclrules.pl
index 5b6c711dc8..8b146d8dba 100755
--- a/src/check-aclrules.pl
+++ b/src/check-aclrules.pl
@@ -59,6 +59,7 @@ my %whitelist = (
"storageClose" => 1,
"interfaceOpen" => 1,
"interfaceClose" => 1,
+ "connectURIProbe" => 1,
);
# Temp hack - remove it once xen driver is fixed
Heh, and that last comment tells me we've got some stuff that can be
purged now :-)
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|