mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-27 19:11:16 +00:00
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>
92 lines
2.0 KiB
C
92 lines
2.0 KiB
C
/*
|
|
* Copyright (C) 2020 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/>.
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
#include "libvirt_internal.h"
|
|
|
|
#include "testutils.h"
|
|
#include "virlog.h"
|
|
#include "viruri.h"
|
|
|
|
#define VIR_FROM_THIS VIR_FROM_RPC
|
|
|
|
VIR_LOG_INIT("tests.migtest");
|
|
|
|
struct migLocalData {
|
|
const char *uri;
|
|
bool fail;
|
|
};
|
|
|
|
|
|
static int
|
|
testMigNotLocal(const void *args)
|
|
{
|
|
int ret = -1;
|
|
const struct migLocalData *data = args;
|
|
|
|
ret = virDomainMigrateCheckNotLocal(data->uri);
|
|
|
|
if (ret == -1) {
|
|
if (data->fail) {
|
|
virResetLastError();
|
|
return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
if (data->fail) {
|
|
VIR_TEST_DEBUG("passed instead of expected failure");
|
|
return -1;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
static int
|
|
mymain(void)
|
|
{
|
|
int ret = 0;
|
|
|
|
#define TEST_FULL(uri, fail) \
|
|
do { \
|
|
const struct migLocalData data = { \
|
|
uri, fail \
|
|
}; \
|
|
if (virTestRun("Test URI " # uri, testMigNotLocal, &data) < 0) \
|
|
ret = -1; \
|
|
} while (0)
|
|
|
|
#define TEST(uri) TEST_FULL(uri, false)
|
|
#define TEST_FAIL(uri) TEST_FULL(uri, true)
|
|
|
|
TEST_FAIL("qemu:///system");
|
|
|
|
TEST_FAIL("//localhost");
|
|
TEST_FAIL("tcp://localhost.localdomain/");
|
|
|
|
TEST("scheme://some.cryptorandom.fqdn.tld");
|
|
|
|
TEST("hehe+unix:///?socket=/path/to/some-sock");
|
|
|
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
}
|
|
|
|
VIR_TEST_MAIN(mymain)
|