diff options
author | Ondrej Holy <oholy@redhat.com> | 2020-09-30 15:01:04 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2020-11-30 09:25:26 +0000 |
commit | cf540d8dd52ff024cb387a253da8169ef3e54717 (patch) | |
tree | 66cb88a3bfac679b817be4601f4351408f6410a7 | |
parent | e205d224a69d8997180b5fb480dbf981f1a2a171 (diff) | |
download | gvfs-cf540d8dd52ff024cb387a253da8169ef3e54717.tar.gz |
sftp: Use connection multiplexing instead of multiple connections
Currently, two connections are established in order to be responsive
even during file transfers. However, this causes duplicated prompts
when ssh-askpass is used. Let's use connection multiplexing instead
to avoid those duplicated prompts.
Fixes: https://gitlab.gnome.org/GNOME/gvfs/-/issues/510
-rw-r--r-- | daemon/gvfsbackendsftp.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/daemon/gvfsbackendsftp.c b/daemon/gvfsbackendsftp.c index f843dec4..4ec4c58b 100644 --- a/daemon/gvfsbackendsftp.c +++ b/daemon/gvfsbackendsftp.c @@ -465,7 +465,7 @@ setup_ssh_environment (void) } static char ** -setup_ssh_commandline (GVfsBackend *backend) +setup_ssh_commandline (GVfsBackend *backend, const gchar *control_path) { GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend); guint last_arg; @@ -488,7 +488,8 @@ setup_ssh_commandline (GVfsBackend *backend) #ifndef USE_PTY args[last_arg++] = g_strdup ("-oBatchMode yes"); #endif - + args[last_arg++] = g_strdup ("-oControlMaster auto"); + args[last_arg++] = g_strdup_printf ("-oControlPath=%s/%%C", control_path); } else if (op_backend->client_vendor == SFTP_VENDOR_SSH) args[last_arg++] = g_strdup ("-x"); @@ -1841,8 +1842,13 @@ setup_connection (GVfsBackend *backend, gboolean res; char *extension_name, *extension_data; int i; + gchar *control_path = NULL; + + control_path = g_build_filename (g_get_user_runtime_dir (), "gvfsd-sftp", NULL); + g_mkdir (control_path, 0700); - args = setup_ssh_commandline (backend); + args = setup_ssh_commandline (backend, control_path); + g_free (control_path); if (!spawn_ssh (backend, args, &pid, |