diff options
Diffstat (limited to 'abs')
-rw-r--r-- | abs/core/dbus/30-dbus | 6 | ||||
-rw-r--r-- | abs/core/dbus/PKGBUILD | 77 | ||||
-rw-r--r-- | abs/core/dbus/memleak.patch | 37 | ||||
-rw-r--r-- | abs/core/dbus/systemd-user-session.patch | 183 |
4 files changed, 275 insertions, 28 deletions
diff --git a/abs/core/dbus/30-dbus b/abs/core/dbus/30-dbus index 69d2660..42b3a5f 100644 --- a/abs/core/dbus/30-dbus +++ b/abs/core/dbus/30-dbus @@ -1,8 +1,6 @@ #!/bin/bash # launches a session dbus instance - -dbuslaunch="`which dbus-launch 2>/dev/null`" -if [ -n "$dbuslaunch" ] && [ -x "$dbuslaunch" ] && [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then - eval `$dbuslaunch --sh-syntax --exit-with-session` +if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then + eval $(dbus-launch --sh-syntax --exit-with-session) fi diff --git a/abs/core/dbus/PKGBUILD b/abs/core/dbus/PKGBUILD index 02b2696..ca11c98 100644 --- a/abs/core/dbus/PKGBUILD +++ b/abs/core/dbus/PKGBUILD @@ -1,42 +1,71 @@ -# $Id: PKGBUILD 163850 2012-07-21 11:19:03Z andyrtr $ +# $Id$ +# Maintainer: Tom Gundersen <teg@jklm.no> # Maintainer: Jan de Groot <jgc@archlinux.org> # Contributor: Link Dupont <link@subpop.net> # -pkgname=dbus -pkgver=1.6.4 +pkgbase=dbus +pkgname=('dbus' 'libdbus') +pkgver=1.8.0 pkgrel=1 pkgdesc="Freedesktop.org message bus system" url="http://www.freedesktop.org/Software/dbus" arch=(i686 x86_64) license=('GPL' 'custom') -depends=("dbus-core>=$pkgver" 'libx11') -source=(http://dbus.freedesktop.org/releases/$pkgname/$pkgname-$pkgver.tar.gz{,.asc} +makedepends=('libx11' 'systemd' 'xmlto' 'docbook-xsl') +source=(http://dbus.freedesktop.org/releases/dbus/dbus-$pkgver.tar.gz 30-dbus) -md5sums=('5ec43dc4554cba638917317b2b4f7640' - '3d4482ee39b49da334441c76f83bf1cb' - '9fafe8b28460aeaa6054309ef4c5ed92') +md5sums=('059fbe84e39fc99c67a14f15b1f39dff' + '3314d727fa57fc443fce25b5cbeebbcc') + +prepare() { + cd dbus-$pkgver +} build() { - cd $pkgname-$pkgver + cd dbus-$pkgver ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --libexecdir=/usr/lib/dbus-1.0 --with-dbus-user=81 \ - --with-system-pid-file=/var/run/dbus.pid \ - --disable-verbose-mode --disable-static \ + --libexecdir=/usr/lib/dbus-1.0 --with-dbus-user=dbus \ + --with-system-pid-file=/run/dbus/pid \ + --with-system-socket=/run/dbus/system_bus_socket \ + --with-console-auth-dir=/run/console/ \ --enable-inotify --disable-dnotify \ - --disable-tests --disable-asserts - make -C tools dbus-launch + --disable-verbose-mode --disable-static \ + --disable-tests --disable-asserts \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --enable-systemd + make +} + +package_dbus(){ + depends=('libdbus' 'expat') + optdepends=('libx11: dbus-launch support') + provides=('dbus-core') + conflicts=('dbus-core') + replaces=('dbus-core') + + cd dbus-$pkgver + make DESTDIR="$pkgdir" install + + rm -rf "$pkgdir/var/run" + + install -Dm755 ../30-dbus "$pkgdir/etc/X11/xinit/xinitrc.d/30-dbus" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/dbus/COPYING" + + # split out libdbus-1 + rm -rf "$srcdir/_libdbus" + install -dm755 "$srcdir"/_libdbus/usr/lib/dbus-1.0 + mv "$pkgdir"/usr/include "$srcdir"/_libdbus/usr/ + mv "$pkgdir"/usr/lib/pkgconfig "$srcdir"/_libdbus/usr/lib/ + mv "$pkgdir"/usr/lib/libdbus* "$srcdir"/_libdbus/usr/lib/ + mv "$pkgdir"/usr/lib/dbus-1.0/include "$srcdir"/_libdbus/usr/lib/dbus-1.0/ + install -Dm644 COPYING "$srcdir"/_libdbus/usr/share/licenses/libdbus/COPYING } -package() { - cd $pkgname-$pkgver - install -m755 -d "$pkgdir/usr/bin" - install -m755 -d "$pkgdir/usr/share/man/man1" - install -m755 tools/dbus-launch "$pkgdir/usr/bin/" - install -m644 doc/dbus-launch.1 "$pkgdir/usr/share/man/man1/" +package_libdbus(){ + pkgdesc="DBus library" + depends=('glibc') - install -m755 -d "$pkgdir/etc/X11/xinit/xinitrc.d" - install -m755 ../30-dbus "$pkgdir/etc/X11/xinit/xinitrc.d/" - install -d -m755 "$pkgdir/usr/share/licenses/dbus" - install -m644 COPYING "$pkgdir/usr/share/licenses/dbus/" + mv "$srcdir"/_libdbus/* "$pkgdir" } diff --git a/abs/core/dbus/memleak.patch b/abs/core/dbus/memleak.patch new file mode 100644 index 0000000..7dea794 --- /dev/null +++ b/abs/core/dbus/memleak.patch @@ -0,0 +1,37 @@ +From 03aeaccbffa97c9237b57ca067e3da7388862129 Mon Sep 17 00:00:00 2001 +From: Radoslaw Pajak <r.pajak@samsung.com> +Date: Fri, 08 Nov 2013 12:51:32 +0000 +Subject: fixed memory freeing if error during listing services + +Signed-off-by: Radoslaw Pajak <r.pajak@samsung.com> +Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk> +Bug: https://bugs.freedesktop.org/show_bug.cgi?id=71526 +--- +diff --git a/bus/activation.c b/bus/activation.c +index fcb7133..ea48a26 100644 +--- a/bus/activation.c ++++ b/bus/activation.c +@@ -2179,7 +2179,7 @@ bus_activation_list_services (BusActivation *activation, + + error: + for (j = 0; j < i; j++) +- dbus_free (retval[i]); ++ dbus_free (retval[j]); + dbus_free (retval); + + return FALSE; +diff --git a/bus/services.c b/bus/services.c +index 6f380fa..01a720e 100644 +--- a/bus/services.c ++++ b/bus/services.c +@@ -368,7 +368,7 @@ bus_registry_list_services (BusRegistry *registry, + + error: + for (j = 0; j < i; j++) +- dbus_free (retval[i]); ++ dbus_free (retval[j]); + dbus_free (retval); + + return FALSE; +-- +cgit v0.9.0.2-2-gbebe diff --git a/abs/core/dbus/systemd-user-session.patch b/abs/core/dbus/systemd-user-session.patch new file mode 100644 index 0000000..3e05324 --- /dev/null +++ b/abs/core/dbus/systemd-user-session.patch @@ -0,0 +1,183 @@ +commit d728fdc655f17031da3bb129ab2fd17dadf0fe3a +Author: Simon Peeters <peeters.simon@gmail.com> +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 <peeters.simon@gmail.com> + +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 |