mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-06 05:48:01 +02:00
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.
This commit is contained in:
parent
70a0ac620a
commit
920c3c0292
5 changed files with 60 additions and 1 deletions
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
41
test/name-test/test-wait-for-echo.py
Executable file
41
test/name-test/test-wait-for-echo.py
Executable file
|
|
@ -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)
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue