1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-02-08 09:57:26 +03:00

remote: change socket helper to return full daemon path

The remoteGetUNIXSocket method currently just returns the daemon name
and the caller then converts this to a path. Except the SSH helper
didn't do this, so it was relying on later code expanding $PATH, and
this doesn't allow for build root overrides.

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2021-05-24 14:08:44 +01:00
parent faf8354674
commit fcdcf8f70c
4 changed files with 41 additions and 39 deletions

View File

@ -700,23 +700,6 @@ remoteConnectSupportsFeatureUnlocked(virConnectPtr conn,
} }
#ifndef WIN32
static const char *
remoteGetDaemonPathEnv(void)
{
/* We prefer a VIRTD_PATH env var to use for all daemons,
* but if it is not set we will fallback to LIBVIRTD_PATH
* for previous behaviour
*/
if (getenv("VIRTD_PATH") != NULL) {
return "VIRTD_PATH";
} else {
return "LIBVIRTD_PATH";
}
}
#endif /* WIN32 */
/* /*
* URIs that this driver needs to handle: * URIs that this driver needs to handle:
* *
@ -763,7 +746,7 @@ doRemoteOpen(virConnectPtr conn,
g_autofree char *knownHostsVerify = NULL; g_autofree char *knownHostsVerify = NULL;
g_autofree char *knownHosts = NULL; g_autofree char *knownHosts = NULL;
g_autofree char *mode_str = NULL; g_autofree char *mode_str = NULL;
g_autofree char *daemon_name = NULL; g_autofree char *daemon_path = NULL;
g_autofree char *proxy_str = NULL; g_autofree char *proxy_str = NULL;
bool sanity = true; bool sanity = true;
bool verify = true; bool verify = true;
@ -942,7 +925,7 @@ doRemoteOpen(virConnectPtr conn,
case REMOTE_DRIVER_TRANSPORT_LIBSSH2: case REMOTE_DRIVER_TRANSPORT_LIBSSH2:
if (!sockname && if (!sockname &&
!(sockname = remoteGetUNIXSocket(transport, mode, driver_str, !(sockname = remoteGetUNIXSocket(transport, mode, driver_str,
flags, &daemon_name))) flags, &daemon_path)))
goto failed; goto failed;
break; break;
@ -1038,19 +1021,9 @@ doRemoteOpen(virConnectPtr conn,
#ifndef WIN32 #ifndef WIN32
case REMOTE_DRIVER_TRANSPORT_UNIX: case REMOTE_DRIVER_TRANSPORT_UNIX:
if (flags & REMOTE_DRIVER_OPEN_AUTOSTART) {
const char *env_name = remoteGetDaemonPathEnv();
if (!(daemonPath = virFileFindResourceFull(daemon_name,
NULL, NULL,
abs_top_builddir "/src",
SBINDIR,
env_name)))
goto failed;
}
if (!(priv->client = virNetClientNewUNIX(sockname, if (!(priv->client = virNetClientNewUNIX(sockname,
flags & REMOTE_DRIVER_OPEN_AUTOSTART, flags & REMOTE_DRIVER_OPEN_AUTOSTART,
daemonPath))) daemon_path)))
goto failed; goto failed;
priv->is_secure = 1; priv->is_secure = 1;

View File

@ -47,6 +47,22 @@ VIR_ENUM_IMPL(remoteDriverMode,
"legacy", "legacy",
"direct"); "direct");
#ifndef WIN32
static const char *
remoteGetDaemonPathEnv(void)
{
/* We prefer a VIRTD_PATH env var to use for all daemons,
* but if it is not set we will fallback to LIBVIRTD_PATH
* for previous behaviour
*/
if (getenv("VIRTD_PATH") != NULL) {
return "VIRTD_PATH";
} else {
return "LIBVIRTD_PATH";
}
}
#endif /* WIN32 */
int int
remoteSplitURIScheme(virURI *uri, remoteSplitURIScheme(virURI *uri,
@ -136,13 +152,19 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
remoteDriverMode mode, remoteDriverMode mode,
const char *driver, const char *driver,
unsigned int flags, unsigned int flags,
char **daemon) char **daemon_path)
{ {
char *sock_name = NULL; char *sock_name = NULL;
g_autofree char *direct_daemon = NULL; g_autofree char *direct_daemon = NULL;
g_autofree char *legacy_daemon = NULL; g_autofree char *legacy_daemon = NULL;
g_autofree char *daemon_name = NULL;
g_autofree char *direct_sock_name = NULL; g_autofree char *direct_sock_name = NULL;
g_autofree char *legacy_sock_name = NULL; g_autofree char *legacy_sock_name = NULL;
#ifndef WIN32
const char *env_name = remoteGetDaemonPathEnv();
#else
const char *env_path = NULL;
#endif
VIR_DEBUG("Choosing remote socket for transport=%s mode=%s driver=%s flags=0x%x", VIR_DEBUG("Choosing remote socket for transport=%s mode=%s driver=%s flags=0x%x",
remoteDriverTransportTypeToString(transport), remoteDriverTransportTypeToString(transport),
@ -182,7 +204,7 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
switch ((remoteDriverMode)mode) { switch ((remoteDriverMode)mode) {
case REMOTE_DRIVER_MODE_LEGACY: case REMOTE_DRIVER_MODE_LEGACY:
sock_name = g_steal_pointer(&legacy_sock_name); sock_name = g_steal_pointer(&legacy_sock_name);
*daemon = g_steal_pointer(&legacy_daemon); daemon_name = g_steal_pointer(&legacy_daemon);
break; break;
case REMOTE_DRIVER_MODE_DIRECT: case REMOTE_DRIVER_MODE_DIRECT:
@ -200,7 +222,7 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
} }
sock_name = g_steal_pointer(&direct_sock_name); sock_name = g_steal_pointer(&direct_sock_name);
*daemon = g_steal_pointer(&direct_daemon); daemon_name = g_steal_pointer(&direct_daemon);
break; break;
case REMOTE_DRIVER_MODE_AUTO: case REMOTE_DRIVER_MODE_AUTO:
@ -210,8 +232,15 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
return NULL; return NULL;
} }
VIR_DEBUG("Chosen UNIX sockname=%s daemon=%s with mode=%s", if (!(*daemon_path = virFileFindResourceFull(daemon_name,
sock_name, NULLSTR(*daemon), NULL, NULL,
abs_top_builddir "/src",
SBINDIR,
env_name)))
return NULL;
VIR_DEBUG("Chosen UNIX sockname=%s daemon_path=%s with mode=%s",
sock_name, NULLSTR(*daemon_path),
remoteDriverModeTypeToString(mode)); remoteDriverModeTypeToString(mode));
return sock_name; return sock_name;
} }

View File

@ -67,7 +67,7 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
remoteDriverMode mode, remoteDriverMode mode,
const char *driver, const char *driver,
unsigned int flags, /* remoteDriverOpenFlags */ unsigned int flags, /* remoteDriverOpenFlags */
char **daemon); char **daemon_path);
void void
remoteGetURIDaemonInfo(virURI *uri, remoteGetURIDaemonInfo(virURI *uri,

View File

@ -358,7 +358,7 @@ int main(int argc, char **argv)
gboolean version = false; gboolean version = false;
gboolean readonly = false; gboolean readonly = false;
g_autofree char *sock_path = NULL; g_autofree char *sock_path = NULL;
g_autofree char *daemon_name = NULL; g_autofree char *daemon_path = NULL;
g_autoptr(virNetSocket) sock = NULL; g_autoptr(virNetSocket) sock = NULL;
GError *error = NULL; GError *error = NULL;
g_autoptr(GOptionContext) context = NULL; g_autoptr(GOptionContext) context = NULL;
@ -429,10 +429,10 @@ int main(int argc, char **argv)
REMOTE_DRIVER_MODE_AUTO, REMOTE_DRIVER_MODE_AUTO,
driver, driver,
flags, flags,
&daemon_name); &daemon_path);
if (virNetSocketNewConnectUNIX(sock_path, flags & REMOTE_DRIVER_OPEN_AUTOSTART, if (virNetSocketNewConnectUNIX(sock_path, flags & REMOTE_DRIVER_OPEN_AUTOSTART,
daemon_name, &sock) < 0) { daemon_path, &sock) < 0) {
g_printerr(_("%s: cannot connect to '%s': %s\n"), g_printerr(_("%s: cannot connect to '%s': %s\n"),
argv[0], sock_path, virGetLastErrorMessage()); argv[0], sock_path, virGetLastErrorMessage());
exit(EXIT_FAILURE); exit(EXIT_FAILURE);