Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=ryuotesting10.git;a=commitdiff;h=dd7e6ed95469bd706bfa0926119040419e78165c

commit dd7e6ed95469bd706bfa0926119040419e78165c
Author: James Buren <[email protected]>
Date:   Sun Feb 17 19:15:16 2013 -0600

dbus-1.6.8-3-x86_64
* add patch from freedesktop upstream for fixing systemd dbus activation
* release bump

diff --git a/source/base/dbus/FrugalBuild b/source/base/dbus/FrugalBuild
index 474ef18..98076b6 100644
--- a/source/base/dbus/FrugalBuild
+++ b/source/base/dbus/FrugalBuild
@@ -3,7 +3,7 @@

pkgname=dbus
pkgver=1.6.8
-pkgrel=2
+pkgrel=3
pkgdesc="A message bus system"
url="http://freedesktop.org/wiki/Software/dbus";
depends=('libxml2>=2.7.8' 'expat' 'shadow')
@@ -14,10 +14,12 @@ up2date="Flasttar 
http://dbus.freedesktop.org/releases/dbus/";

source=(http://dbus.freedesktop.org/releases/dbus/$pkgname-$pkgver.tar.gz \
dbus-1-launch \
-       dbus-1-launch.desktop)
+       dbus-1-launch.desktop \
+       systemd-user-session.patch)
sha1sums=('d9634807d1de9b64727ae2178e3af2227fca0fca' \
'740af74eb43cadf1277346029577aadd3d10f2b5' \
-         '9009283707f5cdf0f883876f80596bc44cc8722c')
+          '9009283707f5cdf0f883876f80596bc44cc8722c' \
+          'ea50f96a7e3048da4d6a0861942ebaba2cf482d7')

_F_systemd_scriptlet="$pkgname.install"
_F_systemd_units=(dbus=e)
diff --git a/source/base/dbus/systemd-user-session.patch 
b/source/base/dbus/systemd-user-session.patch
new file mode 100644
index 0000000..cfe8338
--- /dev/null
+++ b/source/base/dbus/systemd-user-session.patch
@@ -0,0 +1,183 @@
+commit d728fdc655f17031da3bb129ab2fd17dadf0fe3a
+Author: Simon Peeters <[email protected]>
+Date:   8 weeks ago
+
+    Set correct address when using --address=systemd:
+
+    When dbus gets launched through systemd, we need to create an address
+    string based on the sockets passed.
+
+    The _dbus_append_addres_from_socket() function is responsible for
+    extracting the address information from the file-descriptor and
+    formatting it in a dbus friendly way.
+
+    This fixes bus activation when running dbus under a systemd session.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=50962
+
+    Signed-off-by: Simon Peeters <[email protected]>
+
+diff --git a/dbus/dbus-server-unix.c b/dbus/dbus-server-unix.c
+index 130f66e..d995240 100644
+--- a/dbus/dbus-server-unix.c
++++ b/dbus/dbus-server-unix.c
+@@ -149,7 +149,7 @@ _dbus_server_listen_platform_specific (DBusAddressEntry 
*entry,
+     }
+   else if (strcmp (method, "systemd") == 0)
+     {
+-      int n, *fds;
++      int i, n, *fds;
+       DBusString address;
+
+       n = _dbus_listen_systemd_sockets (&fds, error);
+@@ -159,27 +159,39 @@ _dbus_server_listen_platform_specific (DBusAddressEntry 
*entry,
+           return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
+         }
+
+-      _dbus_string_init_const (&address, "systemd:");
++      if (!_dbus_string_init (&address))
++          goto systemd_oom;
+
+-      *server_p = _dbus_server_new_for_socket (fds, n, &address, NULL);
+-      if (*server_p == NULL)
++      for (i = 0; i < n; i++)
+         {
+-          int i;
+-
+-          for (i = 0; i < n; i++)
++          if (i > 0)
+             {
+-              _dbus_close_socket (fds[i], NULL);
++              if (!_dbus_string_append (&address, ";"))
++                goto systemd_oom;
+             }
+-          dbus_free (fds);
+-
+-          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
+-          return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
++          if (!_dbus_append_address_from_socket (fds[i], &address, error))
++            goto systemd_err;
+         }
+
++      *server_p = _dbus_server_new_for_socket (fds, n, &address, NULL);
++      if (*server_p == NULL)
++        goto systemd_oom;
++
+       dbus_free (fds);
+
+       return DBUS_SERVER_LISTEN_OK;
+-      }
++  systemd_oom:
++      _DBUS_SET_OOM (error);
++  systemd_err:
++      for (i = 0; i < n; i++)
++        {
++          _dbus_close_socket (fds[i], NULL);
++        }
++      dbus_free (fds);
++      _dbus_string_free (&address);
++
++      return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
++    }
+ #ifdef DBUS_ENABLE_LAUNCHD
+   else if (strcmp (method, "launchd") == 0)
+     {
+diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
+index b4ecc96..55743b1 100644
+--- a/dbus/dbus-sysdeps-unix.c
++++ b/dbus/dbus-sysdeps-unix.c
+@@ -55,6 +55,7 @@
+ #include <netinet/in.h>
+ #include <netdb.h>
+ #include <grp.h>
++#include <arpa/inet.h>
+
+ #ifdef HAVE_ERRNO_H
+ #include <errno.h>
+@@ -4160,4 +4161,71 @@ _dbus_check_setuid (void)
+ #endif
+ }
+
++/**
++ * Read the address from the socket and append it to the string
++ *
++ * @param fd the socket
++ * @param address
++ * @param error return location for error code
++ */
++dbus_bool_t
++_dbus_append_address_from_socket (int         fd,
++                                  DBusString *address,
++                                  DBusError  *error)
++{
++  union {
++      struct sockaddr sa;
++      struct sockaddr_storage storage;
++      struct sockaddr_un un;
++      struct sockaddr_in ipv4;
++      struct sockaddr_in6 ipv6;
++  } socket;
++  char hostip[INET6_ADDRSTRLEN];
++  int size = sizeof (socket);
++
++  if (getsockname (fd, &socket.sa, &size))
++    goto err;
++
++  switch (socket.sa.sa_family)
++    {
++    case AF_UNIX:
++      if (socket.un.sun_path[0]=='\0')
++        {
++          if (_dbus_string_append_printf (address, "unix:abstract=%s", 
&(socket.un.sun_path[1])))
++            return TRUE;
++        }
++      else
++        {
++          if (_dbus_string_append_printf (address, "unix:path=%s", 
socket.un.sun_path))
++            return TRUE;
++        }
++      break;
++    case AF_INET:
++      if (inet_ntop (AF_INET, &socket.ipv4.sin_addr, hostip, sizeof (hostip)))
++        if (_dbus_string_append_printf (address, 
"tcp:family=ipv4,host=%s,port=%u",
++                   hostip, ntohs (socket.ipv4.sin_port)))
++          return TRUE;
++      break;
++#ifdef AF_INET6
++    case AF_INET6:
++      if (inet_ntop (AF_INET6, &socket.ipv6.sin6_addr, hostip, sizeof 
(hostip)))
++        if (_dbus_string_append_printf (address, 
"tcp:family=ipv6,host=%s,port=%u",
++                   hostip, ntohs (socket.ipv6.sin6_port)))
++          return TRUE;
++      break;
++#endif
++    default:
++      dbus_set_error (error,
++                      _dbus_error_from_errno (EINVAL),
++                      "Failed to read address from socket: Unknown socket 
type.");
++      return FALSE;
++    }
++ err:
++  dbus_set_error (error,
++                  _dbus_error_from_errno (errno),
++                  "Failed to open socket: %s",
++                  _dbus_strerror (errno));
++  return FALSE;
++}
++
+ /* tests in dbus-sysdeps-util.c */
+diff --git a/dbus/dbus-sysdeps-unix.h b/dbus/dbus-sysdeps-unix.h
+index 9b70896..a265b33 100644
+--- a/dbus/dbus-sysdeps-unix.h
++++ b/dbus/dbus-sysdeps-unix.h
+@@ -138,6 +138,10 @@ dbus_bool_t _dbus_parse_uid (const DBusString  *uid_str,
+
+ void _dbus_close_all (void);
+
++dbus_bool_t _dbus_append_address_from_socket (int         fd,
++                                              DBusString *address,
++                                              DBusError  *error);
++
+ /** @} */
+
+ DBUS_END_DECLS
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to