[gvfs/wip/oholy/socket-fixes: 1/5] daemon: Create socket dir from gvfsd daemon




commit 303675c98c399790560c80c792dd9a28bd6a4c69
Author: Ondrej Holy <oholy redhat com>
Date:   Tue Mar 30 10:03:28 2021 +0200

    daemon: Create socket dir from gvfsd daemon
    
    Recently, GVfs switched from abstract sockets to named sockets. The
    socket dir is currently created by the individual daemons immediately
    before starting DBus server. If gvfsd-admin is started at first, the
    socket dir is owned by root user and thus it isn't accesible for other
    daemons and clients. Let's create the socket dir early from the gvfsd
    daemon to ensure correct ownership.
    
    https://gitlab.gnome.org/GNOME/gvfs/-/issues/552

 common/gvfsutils.c  | 6 ++++++
 common/gvfsutils.h  | 1 +
 daemon/gvfsdaemon.c | 3 +--
 daemon/main.c       | 6 ++++++
 4 files changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/common/gvfsutils.c b/common/gvfsutils.c
index 8e175d8c..bf6ed508 100644
--- a/common/gvfsutils.c
+++ b/common/gvfsutils.c
@@ -136,3 +136,9 @@ gvfs_is_ipv6 (const char *host)
 
   return TRUE;
 }
+
+gchar *
+gvfs_get_socket_dir (void)
+{
+  return g_build_filename (g_get_user_runtime_dir (), "gvfsd", NULL);
+}
diff --git a/common/gvfsutils.h b/common/gvfsutils.h
index acaea9d2..091b44df 100644
--- a/common/gvfsutils.h
+++ b/common/gvfsutils.h
@@ -31,6 +31,7 @@ void         gvfs_set_debug                         (gboolean          debugging
 void         gvfs_setup_debug_handler               (void);
 
 gboolean     gvfs_is_ipv6                           (const char       *host);
+gchar *      gvfs_get_socket_dir                    (void);
 
 G_END_DECLS
 
diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c
index 8e4fb868..b29bba13 100644
--- a/daemon/gvfsdaemon.c
+++ b/daemon/gvfsdaemon.c
@@ -745,8 +745,7 @@ generate_address (gchar **address, gchar **socket_path)
   gvfs_randomize_string (tmp + 7, 8);
   tmp[15] = '\0';
 
-  socket_dir = g_build_filename (g_get_user_runtime_dir (), "gvfsd", NULL);
-  g_mkdir (socket_dir, 0700);
+  socket_dir = gvfs_get_socket_dir ();
 
   *socket_path = g_build_filename (socket_dir, tmp, NULL);
   *address = g_strdup_printf ("unix:path=%s", *socket_path);
diff --git a/daemon/main.c b/daemon/main.c
index d145c5f8..ff1c522b 100644
--- a/daemon/main.c
+++ b/daemon/main.c
@@ -143,6 +143,7 @@ main (int argc, char *argv[])
   guint name_owner_id;
   GBusNameOwnerFlags flags;
   GOptionContext *context;
+  gchar *socket_dir;
   const GOptionEntry options[] = {
     { "replace", 'r', 0, G_OPTION_ARG_NONE, &replace,  N_("Replace old daemon."), NULL },
     { "no-fuse", 0, 0, G_OPTION_ARG_NONE, &no_fuse,  N_("Don’t start fuse."), NULL },
@@ -212,6 +213,11 @@ main (int argc, char *argv[])
   if (daemon == NULL)
     return 1;
 
+  /* This is needed for gvfsd-admin to ensure correct ownership. */
+  socket_dir = gvfs_get_socket_dir ();
+  g_mkdir (socket_dir, 0700);
+  g_free (socket_dir);
+
   g_signal_connect (daemon, "shutdown",
                    G_CALLBACK (daemon_shutdown), loop);
 


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