mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2025-12-24 18:10:09 +01:00
Infrastructure for testing a "system like" bus in test suite
The tmp-session-like-system.conf bus configuration has a security policy intended to mirror that of the system bus. This allows testing policy rules.
This commit is contained in:
parent
42d278a267
commit
c5526c18ad
4 changed files with 125 additions and 2 deletions
|
|
@ -5,7 +5,7 @@ INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_TEST_C
|
|||
## TESTS
|
||||
if DBUS_BUILD_TESTS
|
||||
TESTS_ENVIRONMENT=DBUS_TOP_BUILDDIR=@abs_top_builddir@ DBUS_TOP_SRCDIR=@abs_top_srcdir@
|
||||
TESTS=run-test.sh
|
||||
TESTS=run-test.sh run-test-systemserver.sh
|
||||
else
|
||||
TESTS=
|
||||
endif
|
||||
|
|
|
|||
41
test/name-test/run-test-systemserver.sh
Executable file
41
test/name-test/run-test-systemserver.sh
Executable file
|
|
@ -0,0 +1,41 @@
|
|||
#! /bin/sh
|
||||
die()
|
||||
{
|
||||
if ! test -z "$DBUS_SESSION_BUS_PID" ; then
|
||||
echo "killing message bus "$DBUS_SESSION_BUS_PID >&2
|
||||
kill -9 $DBUS_SESSION_BUS_PID
|
||||
fi
|
||||
echo $SCRIPTNAME: $* >&2
|
||||
|
||||
exit 1
|
||||
}
|
||||
|
||||
SCRIPTNAME=$0
|
||||
MODE=$1
|
||||
|
||||
## so the tests can complain if you fail to use the script to launch them
|
||||
DBUS_TEST_NAME_RUN_TEST_SCRIPT=1
|
||||
export DBUS_TEST_NAME_RUN_TEST_SCRIPT
|
||||
|
||||
SOURCE_CONFIG_FILE=$DBUS_TOP_SRCDIR/test/name-test/tmp-session-like-system.conf
|
||||
export SOURCE_CONFIG_FILE
|
||||
# Rerun ourselves with tmp session bus if we're not already
|
||||
if test -z "$DBUS_TEST_NAME_IN_SYS_RUN_TEST"; then
|
||||
DBUS_TEST_NAME_IN_SYS_RUN_TEST=1
|
||||
export DBUS_TEST_NAME_IN_SYS_RUN_TEST
|
||||
exec $DBUS_TOP_SRCDIR/tools/run-with-tmp-session-bus.sh $SCRIPTNAME $MODE
|
||||
fi
|
||||
|
||||
if test -n "$DBUS_TEST_MONITOR"; then
|
||||
dbus-monitor --session &
|
||||
fi
|
||||
|
||||
echo "running test-expected-echo-fail"
|
||||
${DBUS_TOP_BUILDDIR}/libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/tools/dbus-send --print-reply --dest=org.freedesktop.DBus.TestSuiteEchoService /org/freedesktop/TestSuite org.freedesktop.TestSuite.Echo string:hi >echo-error-output.tmp 2>&1
|
||||
if ! grep -q 'DBus.Error' echo-error-output.tmp; then
|
||||
echo "Didn't get expected failure; output was:"
|
||||
echo "====="
|
||||
cat echo-error-output.tmp
|
||||
echo "====="
|
||||
exit 1
|
||||
fi
|
||||
79
test/name-test/tmp-session-like-system.conf
Normal file
79
test/name-test/tmp-session-like-system.conf
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<!-- This configuration file controls the per-user-login-session message bus.
|
||||
Add a session-local.conf and edit that rather than changing this
|
||||
file directly. -->
|
||||
|
||||
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||
<busconfig>
|
||||
<!-- Our well-known bus type, don't change this -->
|
||||
<type>session</type>
|
||||
|
||||
<!-- If we fork, keep the user's original umask to avoid affecting
|
||||
the behavior of child processes. -->
|
||||
<keep_umask/>
|
||||
|
||||
<listen>unix:tmpdir=/tmp</listen>
|
||||
|
||||
<standard_session_servicedirs />
|
||||
|
||||
<!-- intended to match system bus -->
|
||||
<policy context="default">
|
||||
<!-- Deny everything then punch holes -->
|
||||
<deny send_interface="*"/>
|
||||
<deny receive_interface="*"/>
|
||||
<deny own="*"/>
|
||||
<!-- But allow all users to connect -->
|
||||
<allow user="*"/>
|
||||
<!-- Allow anyone to talk to the message bus -->
|
||||
<!-- FIXME I think currently these eallow rules are always implicit
|
||||
even if they aren't in here -->
|
||||
<allow send_destination="org.freedesktop.DBus"/>
|
||||
<allow receive_sender="org.freedesktop.DBus"/>
|
||||
<!-- valid replies are always allowed -->
|
||||
<allow send_requested_reply="true" send_type="method_return"/>
|
||||
<allow send_requested_reply="true" send_type="error"/>
|
||||
<allow receive_requested_reply="true"/>
|
||||
<!-- disallow changing the activation environment of system services -->
|
||||
<deny send_destination="org.freedesktop.DBus"
|
||||
send_interface="org.freedesktop.DBus"
|
||||
send_member="UpdateActivationEnvironment"/>
|
||||
</policy>
|
||||
|
||||
<policy context="default">
|
||||
<allow own="org.freedesktop.DBus.TestSuiteEchoService"/>
|
||||
</policy>
|
||||
|
||||
<!-- Config files are placed here that among other things,
|
||||
further restrict the above policy for specific services. -->
|
||||
<includedir>session.d</includedir>
|
||||
|
||||
<!-- This is included last so local configuration can override what's
|
||||
in this standard file -->
|
||||
<include ignore_missing="yes">session-local.conf</include>
|
||||
|
||||
<include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
|
||||
|
||||
<!-- For the session bus, override the default relatively-low limits
|
||||
with essentially infinite limits, since the bus is just running
|
||||
as the user anyway, using up bus resources is not something we need
|
||||
to worry about. In some cases, we do set the limits lower than
|
||||
"all available memory" if exceeding the limit is almost certainly a bug,
|
||||
having the bus enforce a limit is nicer than a huge memory leak. But the
|
||||
intent is that these limits should never be hit. -->
|
||||
|
||||
<!-- the memory limits are 1G instead of say 4G because they can't exceed 32-bit signed int max -->
|
||||
<limit name="max_incoming_bytes">1000000000</limit>
|
||||
<limit name="max_outgoing_bytes">1000000000</limit>
|
||||
<limit name="max_message_size">1000000000</limit>
|
||||
<limit name="service_start_timeout">120000</limit>
|
||||
<limit name="auth_timeout">240000</limit>
|
||||
<limit name="max_completed_connections">100000</limit>
|
||||
<limit name="max_incomplete_connections">10000</limit>
|
||||
<limit name="max_connections_per_user">100000</limit>
|
||||
<limit name="max_pending_service_starts">10000</limit>
|
||||
<limit name="max_names_per_connection">50000</limit>
|
||||
<limit name="max_match_rules_per_connection">50000</limit>
|
||||
<limit name="max_replies_per_connection">50000</limit>
|
||||
<limit name="reply_timeout">300000</limit>
|
||||
|
||||
</busconfig>
|
||||
|
|
@ -26,8 +26,11 @@ SERVICE_DIR="$DBUS_TOP_BUILDDIR/test/data/valid-service-files"
|
|||
ESCAPED_SERVICE_DIR=`echo $SERVICE_DIR | sed -e 's/\//\\\\\\//g'`
|
||||
echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2
|
||||
|
||||
if test -z "$SOURCE_CONFIG_FILE"; then
|
||||
SOURCE_CONFIG_FILE="$DBUS_TOP_BUILDDIR/bus/session.conf";
|
||||
fi
|
||||
## create a configuration file based on the standard session.conf
|
||||
cat $DBUS_TOP_BUILDDIR/bus/session.conf | \
|
||||
cat $SOURCE_CONFIG_FILE | \
|
||||
sed -e 's/<standard_session_servicedirs.*$/<servicedir>'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \
|
||||
sed -e 's/<include.*$//g' \
|
||||
> $CONFIG_FILE
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue