summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2008-12-09 09:15:06 -0500
committerColin Walters <walters@verbum.org>2008-12-09 10:17:36 -0500
commitd899734475f09068dfa410c91e126e1442b0325e (patch)
tree1ac7dc768f0d22dcb3770b06edeac85b1a728b64
parent5cd3e9ca3f237e1151536484fd5a8cef0adf3456 (diff)
Bug 18229: Allow signals
Our previous fix went too far towards lockdown; many things rely on signals to work, and there's no really good reason to restrict which signals can be emitted on the bus because we can't tie them to a particular sender.
-rw-r--r--bus/system.conf.in2
-rw-r--r--test/name-test/Makefile.am2
-rwxr-xr-xtest/name-test/run-test-systemserver.sh9
-rwxr-xr-xtest/name-test/test-wait-for-echo.py41
-rw-r--r--test/name-test/tmp-session-like-system.conf7
5 files changed, 60 insertions, 1 deletions
diff --git a/bus/system.conf.in b/bus/system.conf.in
index ac2822fa..1b6e716a 100644
--- a/bus/system.conf.in
+++ b/bus/system.conf.in
@@ -50,6 +50,8 @@
even if they aren't in here -->
<allow send_destination="org.freedesktop.DBus"/>
<allow receive_sender="org.freedesktop.DBus"/>
+ <!-- Allow all signals to be sent by default -->
+ <allow send_type="signal"/>
<!-- allow sending valid replies -->
<allow send_requested_reply="true" send_type="method_return"/>
<allow send_requested_reply="true" send_type="error"/>
diff --git a/test/name-test/Makefile.am b/test/name-test/Makefile.am
index fee1e606..10a2536d 100644
--- a/test/name-test/Makefile.am
+++ b/test/name-test/Makefile.am
@@ -10,7 +10,7 @@ else
TESTS=
endif
-EXTRA_DIST=run-test.sh
+EXTRA_DIST=run-test.sh run-test-systemserver.sh test-wait-for-echo.py
if DBUS_BUILD_TESTS
diff --git a/test/name-test/run-test-systemserver.sh b/test/name-test/run-test-systemserver.sh
index fd82326c..34dd6487 100755
--- a/test/name-test/run-test-systemserver.sh
+++ b/test/name-test/run-test-systemserver.sh
@@ -39,3 +39,12 @@ if ! grep -q 'DBus.Error' echo-error-output.tmp; then
echo "====="
exit 1
fi
+
+echo "running test echo signal"
+if ! python ./test-wait-for-echo.py; then
+ echo "Failed test-wait-for-echo"
+ exit 1
+fi
+
+
+exit 0
diff --git a/test/name-test/test-wait-for-echo.py b/test/name-test/test-wait-for-echo.py
new file mode 100755
index 00000000..bd09e459
--- /dev/null
+++ b/test/name-test/test-wait-for-echo.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+
+import os,sys
+
+try:
+ import gobject
+ import dbus
+ import dbus.mainloop.glib
+except:
+ print "Failed import, aborting test"
+ sys.exit(0)
+
+dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+loop = gobject.MainLoop()
+
+exitcode = 0
+
+def handle_noreceipt():
+ print "Failed to get signal"
+ global exitcode
+ exitcode = 1
+ loop.quit()
+
+gobject.timeout_add(7000, handle_noreceipt)
+
+bus = dbus.SessionBus()
+
+def sighandler(*args, **kwargs):
+ print "got signal"
+ loop.quit()
+
+bus.add_signal_receiver(sighandler, dbus_interface='org.freedesktop.TestSuite', signal_name='Foo')
+
+o = bus.get_object('org.freedesktop.DBus.TestSuiteEchoService', '/org/freedesktop/TestSuite')
+i = dbus.Interface(o, 'org.freedesktop.TestSuite')
+def nullhandler(*args, **kwargs):
+ pass
+i.EmitFoo(reply_handler=nullhandler, error_handler=nullhandler)
+
+loop.run()
+sys.exit(exitcode)
diff --git a/test/name-test/tmp-session-like-system.conf b/test/name-test/tmp-session-like-system.conf
index e483c89b..96bbf764 100644
--- a/test/name-test/tmp-session-like-system.conf
+++ b/test/name-test/tmp-session-like-system.conf
@@ -29,6 +29,8 @@
even if they aren't in here -->
<allow send_destination="org.freedesktop.DBus"/>
<allow receive_sender="org.freedesktop.DBus"/>
+ <!-- Allow all signals to be sent by default -->
+ <allow send_type="signal"/>
<!-- valid replies are always allowed -->
<allow send_requested_reply="true" send_type="method_return"/>
<allow send_requested_reply="true" send_type="error"/>
@@ -41,6 +43,11 @@
<policy context="default">
<allow own="org.freedesktop.DBus.TestSuiteEchoService"/>
+ <allow send_destination="org.freedesktop.DBus.TestSuiteEchoService"
+ send_interface="org.freedesktop.DBus.Introspectable"/>
+ <allow send_destination="org.freedesktop.DBus.TestSuiteEchoService"
+ send_interface="org.freedesktop.TestSuite"
+ send_member="EmitFoo"/>
</policy>
<!-- Config files are placed here that among other things,