Re: about using privileged (KAuth) helpers: system dbus daemon on OS X?

René J.V. Bertin <[email protected]>
Newsgroups gmane.comp.freedesktop.dbus
Message-ID <[email protected]>
> NB: forcibly pointing the slave to the system dbus socket also provides a working solution:
> %> sudo launchctl setenv DBUS_LAUNCHD_SESSION_BUS_SOCKET "unix:path=/opt/local/var/run/dbus/system_bus_socket"

A proof-of-concept hack that fixes the issue:

in _dbus_lookup_launchd_socket(), check first if DBUS_LAUNCHD_SESSION_BUS_SOCKET is set in the environment before querying launchd :

--- dbus/orig.dbus-sysdeps-unix.c       2016-09-15 22:15:03.000000000 +0200
+++ dbus/dbus-sysdeps-unix.c    2016-09-19 00:12:14.000000000 +0200
@@ -3836,6 +3836,13 @@
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
 
+  const char *c = getenv (launchd_env_var);
+  if (c && *c)
+    {
+      _dbus_string_append (socket_path, c);
+      return TRUE;
+    }
+
   if (_dbus_check_setuid ())
     {
       dbus_set_error_const (error, DBUS_ERROR_NOT_SUPPORTED,
@@ -3883,12 +3890,12 @@
   dbus_bool_t valid_socket;
   DBusString socket_path;
 
-  if (_dbus_check_setuid ())
-    {
-      dbus_set_error_const (error, DBUS_ERROR_NOT_SUPPORTED,
-                            "Unable to find launchd socket when setuid");
-      return FALSE;
-    }
+//   if (_dbus_check_setuid ())
+//     {
+//       dbus_set_error_const (error, DBUS_ERROR_NOT_SUPPORTED,
+//                             "Unable to find launchd socket when setuid");
+//       return FALSE;
+//     }
 
   if (!_dbus_string_init (&socket_path))
     {

In clear_environment(), ensure the bus is set to system on OS X too. There's probably a way to do that by changing dbus-sysdeps-unix.c so that DBUS_STARTER_ADDRESS is used, but this is simpler (as a PoC, and the function is only used in dbus-daemon-helper-tool anyway):

--- bus/orig.activation-helper.c        2016-09-19 00:05:00.000000000 +0200
+++ bus/activation-helper.c     2016-09-18 22:54:28.000000000 +0200
@@ -159,6 +159,9 @@
   /* Ensure the bus is set to system */
   dbus_setenv ("DBUS_STARTER_ADDRESS", DBUS_SYSTEM_BUS_DEFAULT_ADDRESS);
   dbus_setenv ("DBUS_STARTER_BUS_TYPE", "system");
+#ifdef __APPLE__
+  dbus_setenv ("DBUS_LAUNCHD_SESSION_BUS_SOCKET", DBUS_SYSTEM_BUS_DEFAULT_ADDRESS);
+#endif
 #endif
 
   return TRUE;

_______________________________________________
dbus mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dbus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.