[libvirt PATCH 7/9] peer2peer migration: allow connecting to local sockets

Jiri Denemark jdenemar at redhat.com
Tue Aug 25 15:20:15 UTC 2020


On Tue, Aug 25, 2020 at 07:47:13 +0200, Martin Kletzander wrote:
> Local socket connections were outright disabled because there was no "server"
> part in the URI.  However, given how requirements and usage scenarios are
> evolving, some management apps might need the source libvirt daemon to connect
> to the destination daemon over a UNIX socket for peer2peer migration.  Since we
> cannot know where the socket leads (whether the same daemon or not) let's decide
> that based on whether the socket path is non-standard, or rather explicitly
> specified in the URI.  Checking non-standard path would require to ask the
> daemon for configuration and the only misuse that it would prevent would be a
> pretty weird one.  And that's not worth it.  The assumption is that whenever
> someone uses explicit UNIX socket paths in the URI for migration they better
> know what they are doing.
> 
> Partially resolves: https://bugzilla.redhat.com/1638889
> 
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  docs/manpages/virsh.rst    |  9 +++++++++
>  src/libvirt-domain.c       |  8 +++++++-
>  src/remote/remote_driver.c |  8 ++++++--
>  src/util/viruri.c          | 30 ++++++++++++++++++++++++++++++
>  src/util/viruri.h          |  2 ++
>  tests/virmigtest.c         |  2 +-
>  6 files changed, 55 insertions(+), 4 deletions(-)
...
> diff --git a/src/util/viruri.c b/src/util/viruri.c
> index 0112186fdbc4..91f86de19a8e 100644
> --- a/src/util/viruri.c
> +++ b/src/util/viruri.c
> @@ -393,3 +393,33 @@ virURIGetParam(virURIPtr uri, const char *name)
>                     _("Missing URI parameter '%s'"), name);
>      return NULL;
>  }
> +
> +
> +/**
> + * virCheckURIProxied:
> + * @uri: URI to check
> + *
> + * Check if the URI looks like it refers to a non-standard socket path.  In such
> + * scenario the socket might be proxied to a remote server even though the URI
> + * looks like it is only local.
> + *
> + * Returns: true if the URI might be proxied to a remote server
> + */
> +bool
> +virURICheckProxied(virURIPtr uri)

I'd call this function virURICheckUnixSocket or similar as that's what
it's actually doing. It doesn't really care whether the socket is
connected to a proxy or not.

> +{
> +    size_t i = 0;
> +
> +    if (!uri->scheme)
> +        return false;
> +
> +    if (STRNEQ_NULLABLE(strchr(uri->scheme, '+'), "+unix"))
> +        return false;
> +
> +    for (i = 0; i < uri->paramsCount; i++) {
> +        if (STREQ(uri->params[i].name, "socket"))
> +            return true;
> +    }
> +
> +    return false;
> +}

Reviewed-by: Jiri Denemark <jdenemar at redhat.com>




More information about the libvir-list mailing list