libvirt/src/util/viruri.h
Martin Kletzander c69915ccaf peer2peer migration: allow connecting to local sockets
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@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
2020-09-04 10:20:49 +02:00

68 lines
2.0 KiB
C

/*
* viruri.h: internal definitions used for URI parsing.
*
* Copyright (C) 2012 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "internal.h"
#include "virconf.h"
typedef struct _virURI virURI;
typedef virURI *virURIPtr;
typedef struct _virURIParam virURIParam;
typedef virURIParam *virURIParamPtr;
struct _virURIParam {
char *name; /* Name (unescaped). */
char *value; /* Value (unescaped). */
bool ignore; /* Ignore this field in virURIFormatParams */
};
struct _virURI {
char *scheme; /* the URI scheme */
char *server; /* the server part */
char *user; /* the user part */
unsigned int port; /* the port number */
char *path; /* the path string */
char *query; /* the query string */
char *fragment; /* the fragment string */
size_t paramsCount;
size_t paramsAlloc;
virURIParamPtr params;
};
virURIPtr virURIParse(const char *uri)
ATTRIBUTE_NONNULL(1);
char *virURIFormat(virURIPtr uri)
ATTRIBUTE_NONNULL(1);
char *virURIFormatParams(virURIPtr uri);
void virURIFree(virURIPtr uri);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virURI, virURIFree);
int virURIResolveAlias(virConfPtr conf, const char *alias, char **uri);
const char *virURIGetParam(virURIPtr uri, const char *name);
bool virURICheckUnixSocket(virURIPtr uri);
#define VIR_URI_SERVER(uri) ((uri) && (uri)->server ? (uri)->server : "localhost")