[gvfs/wip/oholy/admin-fixes: 6/9] daemon: Fix socket owner for gvfsd-admin




commit 5f9cffd11dc69a9422726a059c7c31bae4b46338
Author: Ondrej Holy <oholy redhat com>
Date:   Tue Mar 30 10:34:11 2021 +0200

    daemon: Fix socket owner for gvfsd-admin
    
    Recently, GVfs switched from abstract sockets to named sockets. The
    named sockets honors file permissions and thus the socket owner is root
    in the case `gvfsd-admin`. This obviously prevents client from connecting.
    Let's change the owner to the value of `PKEXEC_UID` to ensure that the
    socket is usable by the client.
    
    https://gitlab.gnome.org/GNOME/gvfs/-/issues/552

 daemon/gvfsdaemon.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
---
diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c
index b29bba13..a6d6236c 100644
--- a/daemon/gvfsdaemon.c
+++ b/daemon/gvfsdaemon.c
@@ -780,6 +780,7 @@ handle_get_connection (GVfsDBusDaemon *object,
   gchar *address1;
   gchar *socket_path;
   gchar *guid;
+  const char *pkexec_uid;
 
   generate_address (&address1, &socket_path);
 
@@ -803,6 +804,18 @@ handle_get_connection (GVfsDBusDaemon *object,
 
   g_dbus_server_start (server);
 
+  /* This is needed for gvfsd-admin to ensure correct ownership. */
+  pkexec_uid = g_getenv ("PKEXEC_UID");
+  if (pkexec_uid != NULL)
+    {
+      uid_t uid;
+
+      uid = strtol (pkexec_uid, NULL, 10);
+      if (uid != 0)
+        if (chown (socket_path, uid, (gid_t)-1) < 0)
+          g_warning ("Failed to change socket ownership: %s", g_strerror (errno));
+    }
+
   g_signal_connect (server, "new-connection", G_CALLBACK (daemon_new_connection_func), daemon);
 
   gvfs_dbus_daemon_complete_get_connection (object,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]