Even though we have split daemons for some time now, they are not
the default by far. We've made the change ~1.5 year ago (in
v7.5.0-rc1~35).
Therefore, we have some users that use 'mode=legacy' parameter in
their connection URI. But this parameter is not propagated to
virt-ssh-helper (and neither is the 'socket=...' parameter).
But now that virt-ssh-helper parses those URI parameters, we can
pass them onto the remote host.
Resolves:
https://gitlab.com/libvirt/libvirt/-/issues/433
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/remote/remote_driver.c | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 7e1a31a5a0..f8f2dc0636 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -695,18 +695,31 @@ remoteConnectSupportsFeatureUnlocked(virConnectPtr conn,
static char *
remoteConnectFormatURI(virURI *uri,
- const char *driver_str)
+ const char *driver_str,
+ bool unmask)
{
+ const char *names[] = {"mode", "socket", NULL};
g_autofree char *query = NULL;
+ char *ret = NULL;
virURI tmpuri = {
.scheme = (char *)driver_str,
.path = uri->path,
.fragment = uri->fragment,
};
+ if (unmask) {
+ virURIParamsSetIgnore(uri, false, names);
+ }
+
query = tmpuri.query = virURIFormatParams(uri);
- return virURIFormat(&tmpuri);
+ ret = virURIFormat(&tmpuri);
+
+ if (unmask) {
+ virURIParamsSetIgnore(uri, true, names);
+ }
+
+ return ret;
}
/*
@@ -754,6 +767,7 @@ doRemoteOpen(virConnectPtr conn,
g_autofree char *mode_str = NULL;
g_autofree char *daemon_path = NULL;
g_autofree char *proxy_str = NULL;
+ g_autofree char *virtSshURI = NULL;
bool sanity = true;
bool verify = true;
#ifndef WIN32
@@ -825,7 +839,10 @@ doRemoteOpen(virConnectPtr conn,
/* Allow remote serve to probe */
name = g_strdup("");
} else {
- name = remoteConnectFormatURI(conn->uri, driver_str);
+ name = remoteConnectFormatURI(conn->uri, driver_str, false);
+
+ /* Preserve mode and socket parameters. */
+ virtSshURI = remoteConnectFormatURI(conn->uri, driver_str, true);
}
}
@@ -980,7 +997,7 @@ doRemoteOpen(virConnectPtr conn,
proxy,
netcat,
sockname,
- name,
+ virtSshURI ? virtSshURI : name,
flags & REMOTE_DRIVER_OPEN_RO,
auth,
conn->uri);
@@ -1004,7 +1021,7 @@ doRemoteOpen(virConnectPtr conn,
proxy,
netcat,
sockname,
- name,
+ virtSshURI ? virtSshURI : name,
flags & REMOTE_DRIVER_OPEN_RO,
auth,
conn->uri);
@@ -1037,7 +1054,7 @@ doRemoteOpen(virConnectPtr conn,
proxy,
netcat,
sockname,
- name,
+ virtSshURI ? virtSshURI : name,
flags & REMOTE_DRIVER_OPEN_RO)))
goto error;
--
2.39.1