[PATCH 10/10] remote: Pass 'mode' and 'socket' URI parameters to virt-ssh-helper

Michal Privoznik mprivozn at redhat.com
Mon Feb 6 09:16:58 UTC 2023


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 at 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



More information about the libvir-list mailing list