#!/bin/sh
# Copyright © 2003 Colin Walters <walters@debian.org>
# Copyright © 2006 Sjoerd Simons <sjoerd@debian.org>

set -e

MESSAGEUSER=messagebus
MESSAGEHOME=/var/run/dbus
LAUNCHER=/usr/lib/dbus-1.0/dbus-daemon-launch-helper

# This is what the init script would do, but it's simpler (and less
# dependent on sysvinit vs. Upstart vs. etc.) if we do it directly.
reload_dbus_config() {
    [ -S /var/run/dbus/system_bus_socket ] || return 0

    dbus-send --print-reply --system --type=method_call \
        --dest=org.freedesktop.DBus \
        / org.freedesktop.DBus.ReloadConfig > /dev/null || true
}

if [ "$1" = triggered ]; then
    reload_dbus_config
    exit 0
fi

if [ "$1" = configure ]; then
    adduser --system \
            --quiet \
            --home "$MESSAGEHOME" \
            --no-create-home \
            --disabled-password \
            --group "$MESSAGEUSER"

    if [ "`dpkg-divert --listpackage "$LAUNCHER"`" = "dbus.new" ]; then
        rm -f "$LAUNCHER"
        dpkg-divert --remove --rename --package dbus.new --divert "$LAUNCHER.new" "$LAUNCHER" >/dev/null
    fi
    if ! dpkg-statoverride --list "$LAUNCHER" >/dev/null; then
        dpkg-statoverride --update --add root "$MESSAGEUSER" 4754 "$LAUNCHER"
    fi

    # This is idempotent, so it's OK to do every time. The system bus' init
    # script does this anyway, but you also have to do this before a session
    # bus will work, so we do this here for the benefit of people starting
    # a temporary session bus in a chroot
    dbus-uuidgen --ensure
fi

if [ "$1" = configure ] && [ -n "$2" ]; then
    # On upgrades, we only reload config, and don't restart (restarting the
    # system bus is not supported by upstream). The code added by
    # dh_installinit -r creates a start action, below.

    # Recommend a reboot if there is a dbus-daemon running in the same root
    # as us. Deliberately not using anything init-related here, to be
    # init-agnostic: if we get a false positive (at least one dbus-daemon
    # is running but it isn't the system bus) that isn't the end of the
    # world, because it's probably a session bus, so the user needs to
    # log out and back in anyway.
    #
    # Debian has /usr/bin/dbus-daemon, Ubuntu has /bin/dbus-daemon.
    # Look for both.
    if pidof -c /bin/dbus-daemon /usr/bin/dbus-daemon >/dev/null; then
        echo "A reboot is required to replace the running dbus-daemon." >&2
        echo "Please reboot the system when convenient." >&2

        # trigger an update notification that recommends a reboot
        # (used by unattended-upgrades etc.)
        touch /var/run/reboot-required || true

        # same thing for the older update-notifier interface
        [ -x /usr/share/update-notifier/notify-reboot-required ] && \
            /usr/share/update-notifier/notify-reboot-required || true
    fi

    # Create a symlink from the old bus setup to the new locations, so that
    # dbus-daemon (<< 1.9.18) can reload successfully even though dbus
    # does not support re-exec'ing itself. These are deliberately not
    # conffiles so that they won't interfere with us removing the old
    # conffile or moving it out of the way.
    #
    # Keep this until upgrades from versions << 1.9.18 are no longer
    # supported (it can be removed after Debian 9 is released). It is not
    # conditional on the version in $2, because we could conceivably
    # have upgraded 1.8.x -> 1.10.0-1 -> 1.10.0-4 without an intervening
    # reboot.
    ln -fns /usr/share/dbus-1/session.conf /etc/dbus-1/session.conf
    ln -fns /usr/share/dbus-1/system.conf /etc/dbus-1/system.conf
fi

# Automatically added by dh_installinit
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then
	# In case this system is running systemd, we need to ensure that all
	# necessary tmpfiles (if any) are created before starting.
	if [ -d /run/systemd/system ] ; then
		systemd-tmpfiles --create /usr/lib/tmpfiles.d/dbus.conf >/dev/null || true
	fi
fi
# End automatically added section
# Automatically added by dh_installinit
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then
	if [ -x "/etc/init.d/dbus" ]; then
		update-rc.d dbus defaults >/dev/null || exit $?
	fi
fi
# End automatically added section
# Automatically added by dh_installdeb
dpkg-maintscript-helper rm_conffile /etc/dbus-1/session.conf 1.10.0-4~ dbus -- "$@"
# End automatically added section
# Automatically added by dh_installdeb
dpkg-maintscript-helper rm_conffile /etc/dbus-1/system.conf 1.10.0-4~ dbus -- "$@"
# End automatically added section


# Do this after the debhelper-generated bits so that dpkg-maintscript-helper
# will have finished moving configuration files around. We only need to do
# this for upgrades, not new installations.
if [ "$1" = configure ] && [ -n "$2" ]; then
    reload_dbus_config
fi

# We don't start dbus.service in postinst, so ensure dbus.socket is running
if [ "$1" = configure ] && [ -d /run/systemd/system ]; then
    systemctl try-restart sockets.target || true
fi
