Date: Monday, December 3, 2012 @ 06:40:50
  Author: tomegun
Revision: 172464

upgpkg: dbus 1.6.8-3

merge in dbus-core

Also delete xinit.d/30-dbus as it should not be needed.
Implement FS#32902.

Added:
  dbus/trunk/dbus
  dbus/trunk/dbus.install
  dbus/trunk/systemd-user-session.patch
Modified:
  dbus/trunk/PKGBUILD
Deleted:
  dbus/trunk/30-dbus

----------------------------+
 30-dbus                    |    8 -
 PKGBUILD                   |   57 ++++++++-----
 dbus                       |   51 +++++++++++
 dbus.install               |   23 +++++
 systemd-user-session.patch |  183 +++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 293 insertions(+), 29 deletions(-)

Deleted: 30-dbus
===================================================================
--- 30-dbus     2012-12-03 11:18:05 UTC (rev 172463)
+++ 30-dbus     2012-12-03 11:40:50 UTC (rev 172464)
@@ -1,8 +0,0 @@
-#!/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`
-fi

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2012-12-03 11:18:05 UTC (rev 172463)
+++ PKGBUILD    2012-12-03 11:40:50 UTC (rev 172464)
@@ -1,41 +1,56 @@
 # $Id$
+# Maintainer: Tom Gundersen <t...@jklm.no>
 # Maintainer: Jan de Groot <j...@archlinux.org>
 # Contributor: Link Dupont <l...@subpop.net>
 #
 pkgname=dbus
 pkgver=1.6.8
-pkgrel=1
+pkgrel=3
 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}
-        30-dbus)
-md5sums=('3bf059c7dd5eda5f539a1b7cfe7a14a2'
-         '9fafe8b28460aeaa6054309ef4c5ed92')
+# do not depend on systemd to avoid circular dep,
+# dep on shadow for install scriptlet FS#29341
+depends=('expat' 'coreutils' 'filesystem' 'shadow')
+makedepends=('libx11')
+optdepends=('libx11: dbus-launch support')
+provides=('dbus-core')
+conflicts=('dbus-core')
+replaces=('dbus-core')
+options=(!libtool)
+install=dbus.install
+source=(http://dbus.freedesktop.org/releases/dbus/dbus-$pkgver.tar.gz #{,.asc}
+        dbus systemd-user-session.patch)
 
 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 \
+      --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-verbose-mode --disable-static \
-      --enable-inotify --disable-dnotify \
-      --disable-tests --disable-asserts
-  make -C tools dbus-launch
+      --disable-tests --disable-asserts \
+      --with-systemdsystemunitdir=/usr/lib/systemd/system \
+      --enable-systemd
+
+  patch -p1 < "$srcdir/systemd-user-session.patch"
+
+  make
 }
 
-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(){
+  cd dbus-$pkgver
+  make DESTDIR="$pkgdir" install
 
-  install -m755 -d "$pkgdir/etc/X11/xinit/xinitrc.d"
-  install -m755 ../30-dbus "$pkgdir/etc/X11/xinit/xinitrc.d/"
+  rm -rf "$pkgdir/var/run"
 
-  install -d -m755 "$pkgdir/usr/share/licenses/dbus"
-  install -m644 COPYING "$pkgdir/usr/share/licenses/dbus/"
+  install -Dm755 ../dbus "$pkgdir/etc/rc.d/dbus"
+
+  install -Dm644 COPYING "$pkgdir/usr/share/licenses/dbus/COPYING"
 }
+md5sums=('3bf059c7dd5eda5f539a1b7cfe7a14a2'
+         'f0364f3f5dc5f653bb05d39aa36e3264'
+         'd8a1bd529b3ddca671ee1a695a143db9')

Added: dbus
===================================================================
--- dbus                                (rev 0)
+++ dbus        2012-12-03 11:40:50 UTC (rev 172464)
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case $1 in
+    start)
+        stat_busy "Starting D-BUS system messagebus"
+        if [[ ! -d /run/dbus ]] ; then
+            install -m755 -g 81 -o 81 -d /run/dbus
+        fi
+
+        if ! dbus-daemon --system; then
+            stat_fail
+        else
+            add_daemon dbus
+            stat_done
+        fi
+        ;;
+    stop)
+        stat_busy "Stopping D-BUS system messagebus"
+        if ! { [[ -f /run/dbus/pid ]] && kill $(</run/dbus/pid); }; then
+            stat_fail
+        else
+            rm -f /run/dbus/pid
+            rm_daemon dbus
+            stat_done
+        fi
+        ;;
+    restart)
+        $0 stop
+        sleep 1
+        $0 start
+        ;;
+    reload)
+        stat_busy "Reloading D-BUS configuration"
+        if ! { [[ -f /run/dbus/pid ]] && dbus-send \
+                --system --type=method_call \
+                --dest=org.freedesktop.DBus \
+                / org.freedesktop.DBus.ReloadConfig; }; then
+            stat_fail
+        else
+            stat_done
+        fi
+        ;;
+    *)
+        echo "usage: $0 {start|stop|restart|reload}"
+        ;;
+esac
+exit 0

Added: dbus.install
===================================================================
--- dbus.install                                (rev 0)
+++ dbus.install        2012-12-03 11:40:50 UTC (rev 172464)
@@ -0,0 +1,23 @@
+post_install() {
+  getent group dbus >/dev/null || groupadd -g 81 dbus
+  getent passwd dbus >/dev/null || useradd -c 'System message bus' -u 81 -g 
dbus -d '/' -s /bin/false dbus
+  passwd -l dbus &>/dev/null
+}
+
+post_upgrade() {
+  post_install
+
+  # Make sure new rc script can shutdown running dbus
+  if [ -f run/dbus.pid -a -d run/dbus ]; then
+    mv run/dbus.pid run/dbus/pid
+  fi
+}
+
+post_remove() {
+  if getent passwd dbus >/dev/null; then
+    userdel dbus
+  fi
+  if getent group dbus >/dev/null; then
+    groupdel dbus
+  fi
+}

Added: systemd-user-session.patch
===================================================================
--- systemd-user-session.patch                          (rev 0)
+++ systemd-user-session.patch  2012-12-03 11:40:50 UTC (rev 172464)
@@ -0,0 +1,183 @@
+commit d728fdc655f17031da3bb129ab2fd17dadf0fe3a
+Author: Simon Peeters <peeters.si...@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.si...@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

Reply via email to