diff options
| -rw-r--r-- | test/name-test/Makefile.am | 2 | ||||
| -rwxr-xr-x | test/name-test/run-test-systemserver.sh | 41 | ||||
| -rw-r--r-- | test/name-test/tmp-session-like-system.conf | 79 | ||||
| -rwxr-xr-x | tools/run-with-tmp-session-bus.sh | 5 | 
4 files changed, 125 insertions, 2 deletions
diff --git a/test/name-test/Makefile.am b/test/name-test/Makefile.am index 17e05bec..fee1e606 100644 --- a/test/name-test/Makefile.am +++ b/test/name-test/Makefile.am @@ -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 diff --git a/test/name-test/run-test-systemserver.sh b/test/name-test/run-test-systemserver.sh new file mode 100755 index 00000000..fd82326c --- /dev/null +++ b/test/name-test/run-test-systemserver.sh @@ -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 diff --git a/test/name-test/tmp-session-like-system.conf b/test/name-test/tmp-session-like-system.conf new file mode 100644 index 00000000..e483c89b --- /dev/null +++ b/test/name-test/tmp-session-like-system.conf @@ -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> diff --git a/tools/run-with-tmp-session-bus.sh b/tools/run-with-tmp-session-bus.sh index f95ee62e..982184a2 100755 --- a/tools/run-with-tmp-session-bus.sh +++ b/tools/run-with-tmp-session-bus.sh @@ -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  | 
