From d635b4e80569322e73c7f5959995fbad71b94153 Mon Sep 17 00:00:00 2001 From: poma Date: Mon, 26 Oct 2015 11:20:10 +0100 Subject: [PATCH] Accept XDG_RUNTIME_DIR/bus as a valid D-Bus session/user bus --- ...ME_DIR-bus-as-a-valid-D-Bus-session-.patch | 153 ++++++++++++++++++ gvfs.spec | 10 +- 2 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 0001-Accept-XDG_RUNTIME_DIR-bus-as-a-valid-D-Bus-session-.patch diff --git a/0001-Accept-XDG_RUNTIME_DIR-bus-as-a-valid-D-Bus-session-.patch b/0001-Accept-XDG_RUNTIME_DIR-bus-as-a-valid-D-Bus-session-.patch new file mode 100644 index 0000000..ed1bdb9 --- /dev/null +++ b/0001-Accept-XDG_RUNTIME_DIR-bus-as-a-valid-D-Bus-session-.patch @@ -0,0 +1,153 @@ +From 54cfe52e718332f369a1fe03f76b955c22f26cfc Mon Sep 17 00:00:00 2001 +From: Simon McVittie +Date: Fri, 23 Oct 2015 18:51:09 +0100 +Subject: [PATCH] Accept XDG_RUNTIME_DIR/bus as a valid D-Bus session/user bus + +These checks for DBUS_SESSION_BUS_ADDRESS were added to solve +https://bugzilla.gnome.org/show_bug.cgi?id=526454, +in which non-X11-session processes (for example a system service), +or processes under su or similar inside an X11 session, could cause +a dbus-daemon to be autolaunched via dbus-launch. If there was no +X11 display to represent the lifetime of a session, the dbus-daemon +would potentially run forever, causing a "leaked" process; +additionally, other uses of D-Bus by the same uid would start more +dbus-daemons. + +This becomes potentially problematic on systems with the "user bus" +model introduced in dbus 1.10: libdbus, GDBus and sd-bus will now +all try the per-uid socket XDG_RUNTIME_DIR/bus before attempting +autolaunch, so if those are known to be the only implementations in +use on a "legacy-free" system, setting DBUS_SESSION_BUS_ADDRESS is +unnecessary. Check for that socket before giving up. + +XDG_RUNTIME_DIR/bus as implemented by dbus 1.10 with systemd avoids +several of the down sides of autolaunching: it will never start more +than one session bus per uid, and the socket and bus will automatically +be cleaned up when the corresponding "systemd --user" exits. +--- + client/gdaemonvfs.c | 3 ++- + common/gvfsutils.c | 46 +++++++++++++++++++++++++++++++++++++ + common/gvfsutils.h | 1 + + monitor/proxy/gproxyvolumemonitor.c | 3 ++- + 4 files changed, 51 insertions(+), 2 deletions(-) + +diff --git a/client/gdaemonvfs.c b/client/gdaemonvfs.c +index caf846a..8a91570 100644 +--- a/client/gdaemonvfs.c ++++ b/client/gdaemonvfs.c +@@ -40,6 +40,7 @@ + #include + #include + #include ++#include "gvfsutils.h" + + typedef struct { + char *type; +@@ -1501,7 +1502,7 @@ g_io_module_load (GIOModule *module) + * without spawning private dbus instances. + * See bug 526454. + */ +- if (g_getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL) ++ if (!gvfs_have_session_bus ()) + return; + + /* Make this module resident so that we ground the common +diff --git a/common/gvfsutils.c b/common/gvfsutils.c +index 87718f3..47c3117 100644 +--- a/common/gvfsutils.c ++++ b/common/gvfsutils.c +@@ -21,8 +21,15 @@ + + #include + #include ++#include + #include "gvfsutils.h" + ++#ifdef G_OS_UNIX ++#include ++#include ++#include ++#endif ++ + /** + * gvfs_randomize_string: + * @str: the string to randomize +@@ -40,3 +47,42 @@ gvfs_randomize_string (char *str, + for (i = 0; i < len; i++) + str[i] = chars[g_random_int_range (0, strlen(chars))]; + } ++ ++/** ++ * gvfs_have_session_bus: ++ * ++ * Returns: %TRUE if we can connect to a session or user bus without ++ * triggering X11 autolaunching. ++ */ ++gboolean ++gvfs_have_session_bus (void) ++{ ++ if (g_getenv ("DBUS_SESSION_BUS_ADDRESS") != NULL) ++ return TRUE; ++ ++#ifdef G_OS_UNIX ++ { ++ gboolean ret = FALSE; ++ gchar *bus; ++ GStatBuf buf; ++ ++ bus = g_build_filename (g_get_user_runtime_dir (), "bus", NULL); ++ ++ if (g_stat (bus, &buf) < 0) ++ goto out; ++ ++ if (buf.st_uid != geteuid ()) ++ goto out; ++ ++ if ((buf.st_mode & S_IFMT) != S_IFSOCK) ++ goto out; ++ ++ ret = TRUE; ++out: ++ g_free (bus); ++ return ret; ++ } ++#else ++ return FALSE; ++#endif ++} +diff --git a/common/gvfsutils.h b/common/gvfsutils.h +index aa7faf5..edac0b0 100644 +--- a/common/gvfsutils.h ++++ b/common/gvfsutils.h +@@ -24,6 +24,7 @@ G_BEGIN_DECLS + + void gvfs_randomize_string (char *str, + int len); ++gboolean gvfs_have_session_bus (void); + + G_END_DECLS + +diff --git a/monitor/proxy/gproxyvolumemonitor.c b/monitor/proxy/gproxyvolumemonitor.c +index a7466f0..d258546 100644 +--- a/monitor/proxy/gproxyvolumemonitor.c ++++ b/monitor/proxy/gproxyvolumemonitor.c +@@ -45,6 +45,7 @@ + #include "gvfsmonitorimpl.h" + #include "gvfsdbus.h" + #include "gvfsdaemonprotocol.h" ++#include "gvfsutils.h" + + G_LOCK_DEFINE_STATIC(proxy_vm); + +@@ -1412,7 +1413,7 @@ g_proxy_volume_monitor_setup_session_bus_connection (void) + * without spawning private dbus instances. + * See bug 526454. + */ +- if (g_getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL) ++ if (!gvfs_have_session_bus ()) + return FALSE; + + if (the_volume_monitors == NULL) +-- +2.6.1 + diff --git a/gvfs.spec b/gvfs.spec index f60f60c..b6117d4 100644 --- a/gvfs.spec +++ b/gvfs.spec @@ -3,7 +3,7 @@ Name: gvfs Version: 1.26.1.1 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Backends for the gio framework in GLib License: GPLv3 and LGPLv2+ and BSD and MPLv2.0 @@ -16,6 +16,10 @@ Patch0: gvfs-archive-integration.patch # Backported from upstream Patch1: 0001-google-Fail-in-fs-copy-move-if-it-leads-to-display-n.patch +# https://bugzilla.gnome.org/show_bug.cgi?id=756420 +# https://bugzilla.redhat.com/show_bug.cgi?id=1274700 +Patch2: 0001-Accept-XDG_RUNTIME_DIR-bus-as-a-valid-D-Bus-session-.patch + BuildRequires: pkgconfig BuildRequires: glib2-devel >= %{glib2_version} BuildRequires: dbus-glib-devel @@ -188,6 +192,7 @@ the functionality of the installed gvfs package. %setup -q %patch0 -p1 -b .archive-integration %patch1 -p1 -b .google-fail-in-fs-copy +%patch2 -p1 -b .accept-xdg_runtime_dir-bus # Needed for gvfs-0.2.1-archive-integration.patch autoreconf -fi @@ -380,6 +385,9 @@ killall -USR1 gvfsd >&/dev/null || : %changelog +* Fri Oct 23 2015 poma - 1.26.1.1-3 +- Accept XDG_RUNTIME_DIR/bus as a valid D-Bus session/user bus + * Fri Oct 23 2015 Ondrej Holy - 1.26.1.1-2 - google: Fail in-fs copy/move if it leads to display name loss