|  | #!/bin/sh | 
|  |  | 
|  | # dbus-daemon wrapper script for dbus-vmstate testing | 
|  | # | 
|  | # This script allows to tweak the dbus-daemon policy during the test | 
|  | # to test different configurations. | 
|  | # | 
|  | # This program is free software; you can redistribute it and/or modify | 
|  | # it under the terms of the GNU General Public License as published by | 
|  | # the Free Software Foundation; either version 2 of the License, or | 
|  | # (at your option) any later version. | 
|  | # | 
|  | # This program is distributed in the hope that it will be useful, | 
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
|  | # GNU General Public License for more details. | 
|  | # | 
|  | # You should have received a copy of the GNU General Public License | 
|  | # along with this program; if not, see <http://www.gnu.org/licenses/>. | 
|  | # | 
|  | # Copyright (C) 2019 Red Hat, Inc. | 
|  |  | 
|  | write_config() | 
|  | { | 
|  | CONF="$1" | 
|  | cat > "$CONF" <<EOF | 
|  | <busconfig> | 
|  | <type>session</type> | 
|  | <listen>unix:tmpdir=$DBUS_VMSTATE_TEST_TMPDIR</listen> | 
|  |  | 
|  | <policy context="default"> | 
|  | <!-- Holes must be punched in service configuration files for | 
|  | name ownership and sending method calls --> | 
|  | <deny own="*"/> | 
|  | <deny send_type="method_call"/> | 
|  |  | 
|  | <!-- Signals and reply messages (method returns, errors) are allowed | 
|  | by default --> | 
|  | <allow send_type="signal"/> | 
|  | <allow send_requested_reply="true" send_type="method_return"/> | 
|  | <allow send_requested_reply="true" send_type="error"/> | 
|  |  | 
|  | <!-- All messages may be received by default --> | 
|  | <allow receive_type="method_call"/> | 
|  | <allow receive_type="method_return"/> | 
|  | <allow receive_type="error"/> | 
|  | <allow receive_type="signal"/> | 
|  |  | 
|  | <!-- Allow anyone to talk to the message bus --> | 
|  | <allow send_destination="org.freedesktop.DBus" | 
|  | send_interface="org.freedesktop.DBus" /> | 
|  | <allow send_destination="org.freedesktop.DBus" | 
|  | send_interface="org.freedesktop.DBus.Introspectable"/> | 
|  | <allow send_destination="org.freedesktop.DBus" | 
|  | send_interface="org.freedesktop.DBus.Properties"/> | 
|  | <!-- But disallow some specific bus services --> | 
|  | <deny send_destination="org.freedesktop.DBus" | 
|  | send_interface="org.freedesktop.DBus" | 
|  | send_member="UpdateActivationEnvironment"/> | 
|  | <deny send_destination="org.freedesktop.DBus" | 
|  | send_interface="org.freedesktop.DBus.Debug.Stats"/> | 
|  | <deny send_destination="org.freedesktop.DBus" | 
|  | send_interface="org.freedesktop.systemd1.Activator"/> | 
|  |  | 
|  | <allow own="org.qemu.VMState1"/> | 
|  | <allow send_destination="org.qemu.VMState1"/> | 
|  | <allow receive_sender="org.qemu.VMState1"/> | 
|  |  | 
|  | </policy> | 
|  |  | 
|  | <include if_selinux_enabled="yes" | 
|  | selinux_root_relative="yes">contexts/dbus_contexts</include> | 
|  |  | 
|  | </busconfig> | 
|  | EOF | 
|  | } | 
|  |  | 
|  | ARGS= | 
|  | for arg in "$@" | 
|  | do | 
|  | case $arg in | 
|  | --config-file=*) | 
|  | CONF="${arg#*=}" | 
|  | write_config "$CONF" | 
|  | ARGS="$ARGS $1" | 
|  | shift | 
|  | ;; | 
|  | *) | 
|  | ARGS="$ARGS $1" | 
|  | shift | 
|  | ;; | 
|  | esac | 
|  | done | 
|  |  | 
|  | exec dbus-daemon $ARGS |