Date: Monday, March 22, 2021 @ 02:18:19 Author: heftig Revision: 410674
1.48.0-2: disable admin backend until it's fixed Added: gvfs/trunk/0001-daemon-Remove-connection-socket-properly.patch Modified: gvfs/trunk/PKGBUILD -----------------------------------------------------+ 0001-daemon-Remove-connection-socket-properly.patch | 140 ++++++++++++++++++ PKGBUILD | 11 + 2 files changed, 149 insertions(+), 2 deletions(-) Added: 0001-daemon-Remove-connection-socket-properly.patch =================================================================== --- 0001-daemon-Remove-connection-socket-properly.patch (rev 0) +++ 0001-daemon-Remove-connection-socket-properly.patch 2021-03-22 02:18:19 UTC (rev 410674) @@ -0,0 +1,140 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" <[email protected]> +Date: Mon, 22 Mar 2021 00:18:29 +0000 +Subject: [PATCH] daemon: Remove connection socket properly + +The naming scheme for the non-abstract socket was changed but +`new_connection_data_free` was not adjusted to match. + +`GDBusServer` will remove the socket when it stops, but only if +`g_dbus_server_start` was called. So we can simplify the process +somewhat. Also don't bother removing the directory now that all sockets +share it. + +Fixes: 29a00938055d3c7c11533bdda3f84ec51d4cbb32 (daemon: Use named sockets to avoid network permission requirement) +--- + daemon/gvfsdaemon.c | 48 ++++++++++++++++++--------------------------- + 1 file changed, 19 insertions(+), 29 deletions(-) + +diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c +index 2533d9fa..f9124a76 100644 +--- a/daemon/gvfsdaemon.c ++++ b/daemon/gvfsdaemon.c +@@ -89,9 +89,7 @@ struct _GVfsDaemon + + typedef struct { + GVfsDaemon *daemon; +- char *socket_dir; +- GDBusServer *server; +- ++ + GDBusConnection *conn; + } NewConnectionData; + +@@ -656,18 +654,6 @@ static void + new_connection_data_free (void *memory) + { + NewConnectionData *data = memory; +- gchar *socket; +- +- /* Remove the socket and dir after connected */ +- if (data->socket_dir) +- { +- socket = g_strdup_printf ("%s/socket", data->socket_dir); +- g_unlink (socket); +- g_free (socket); +- rmdir (data->socket_dir); +- g_free (data->socket_dir); +- } +- + g_free (data); + } + +@@ -769,18 +755,21 @@ daemon_peer_connection_setup (GVfsDaemon *daemon, + } + + static void +-generate_address (char **address, +- char **socket_dir) ++generate_address (gchar **address, gchar **socket_path) + { +- gchar tmp[9]; ++ gchar tmp[16] = "socket-"; ++ gchar *socket_dir; + +- *socket_dir = g_build_filename (g_get_user_runtime_dir (), "gvfsd", NULL); +- g_mkdir (*socket_dir, 0700); ++ gvfs_randomize_string (tmp + 7, 8); ++ tmp[15] = '\0'; + +- gvfs_randomize_string (tmp, 8); +- tmp[8] = '\0'; ++ socket_dir = g_build_filename (g_get_user_runtime_dir (), "gvfsd", NULL); ++ g_mkdir (socket_dir, 0700); + +- *address = g_strdup_printf ("unix:path=%s/socket-%s", *socket_dir, tmp); ++ *socket_path = g_build_filename (socket_dir, tmp, NULL); ++ *address = g_strdup_printf ("unix:path=%s", *socket_path); ++ ++ g_free (socket_dir); + } + + static gboolean +@@ -814,50 +803,51 @@ handle_get_connection (GVfsDBusDaemon *object, + GError *error; + gchar *address1; + NewConnectionData *data; +- char *socket_dir; ++ gchar *socket_path; + gchar *guid; +- +- generate_address (&address1, &socket_dir); ++ ++ generate_address (&address1, &socket_path); + + data = g_new (NewConnectionData, 1); + data->daemon = daemon; +- data->socket_dir = socket_dir; + data->conn = NULL; + + guid = g_dbus_generate_guid (); + error = NULL; + server = g_dbus_server_new_sync (address1, + G_DBUS_SERVER_FLAGS_NONE, + guid, + daemon->auth_observer, + NULL, /* GCancellable */ + &error); + g_free (guid); + + if (server == NULL) + { + g_dbus_method_invocation_return_gerror (invocation, error); + g_printerr ("daemon: Error creating server at address %s: %s\n", address1, error->message); + g_error_free (error); + goto error_out; + } + + g_dbus_server_start (server); +- data->server = server; + + g_signal_connect (server, "new-connection", G_CALLBACK (daemon_new_connection_func), data); +- ++ + gvfs_dbus_daemon_complete_get_connection (object, + invocation, + address1, + ""); + + g_free (address1); ++ g_free (socket_path); + return TRUE; + + error_out: + new_connection_data_free (data); + g_free (address1); ++ g_unlink (socket_path); ++ g_free (socket_path); + return TRUE; + } + Modified: PKGBUILD =================================================================== --- PKGBUILD 2021-03-22 00:28:41 UTC (rev 410673) +++ PKGBUILD 2021-03-22 02:18:19 UTC (rev 410674) @@ -4,7 +4,7 @@ pkgbase=gvfs pkgname=(gvfs gvfs-{smb,afc,gphoto2,goa,mtp,nfs,google}) pkgver=1.48.0 -pkgrel=1 +pkgrel=2 pkgdesc="Virtual filesystem implementation for GIO" url="https://wiki.gnome.org/Projects/gvfs" arch=(x86_64) @@ -17,12 +17,17 @@ groups=(gnome) _commit=47caf9fc6d137be1cd1645145db22cf2b671da80 # tags/1.48.0^0 source=("git+https://gitlab.gnome.org/GNOME/gvfs.git#commit=$_commit" + 0001-daemon-Remove-connection-socket-properly.patch gvfsd.hook) sha256sums=('SKIP' + 'c7811a2182ca439037004b2c3096b7ef05368c4d203c016944cbee0248d3ca70' 'd3b714db35b2ce75d7f6d528044554decbb9149a98425aff119a071ca0a25282') prepare() { cd $pkgbase + + # https://gitlab.gnome.org/GNOME/gvfs/-/merge_requests/119 + git apply -3 ../0001-daemon-Remove-connection-socket-properly.patch } pkgver() { @@ -31,7 +36,9 @@ } build() { - arch-meson $pkgbase build -D man=true + # Disable the admin backend while it's broken + # https://gitlab.gnome.org/GNOME/gvfs/-/issues/552 + arch-meson $pkgbase build -D man=true -D admin=false meson compile -C build }
