From b91870497d8303baf4c3fd0b8e7f90de44b753e1 Mon Sep 17 00:00:00 2001 From: "John (J5) Palmieri" Date: Sun, 17 Jul 2005 19:36:24 +0000 Subject: * NEWS: Updated to 0.35.2 * python/_dbus.py: Remove import of the dbus.services module as it no longer exists (patch from Dimitur Kirov) * python/service.py (Object::__init__): Fixed typo s/name/bus_name (patch from Dimitur Kirov) * python/examples/example-signal-emitter.py: import dbus.glib to get the main loop and use glib mainloop instead of gtk so X doesn't have to be running. * python/examples/example-signal-recipient.py: import dbus.glib to get the main loop and use glib mainloop instead of gtk so X doesn't have to be running. Import the decorators module directly. * test/glib/Makefile.am: Added DIST_EXTRA files that distcheck didn't pick up on but are needed to build * configure.in: upped version to 0.35.2 * bus/driver.c, bus/selinux.c, bus/selinux.h, dbus/dbus-protocol.h: added Colin Walters' SELinux API rename patch from head s/unix sercurity context/selinux security context/ --- ChangeLog | 30 +++++++++++++++ NEWS | 5 +++ bus/driver.c | 20 +++++----- bus/selinux.c | 59 +++++++++++++++++++++-------- bus/selinux.h | 3 +- configure.in | 2 +- dbus/dbus-protocol.h | 2 +- python/_dbus.py | 1 - python/examples/example-signal-emitter.py | 6 ++- python/examples/example-signal-recipient.py | 13 ++++--- python/service.py | 2 +- test/glib/Makefile.am | 5 +++ 12 files changed, 109 insertions(+), 39 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1011ff47..e391219d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,33 @@ +2005-07-17 John (J5) Palmieri + + * NEWS: Update to 0.35.2 + +2005-07-17 John (J5) Palmieri + + * python/_dbus.py: Remove import of the dbus.services + module as it no longer exists (patch from Dimitur Kirov) + + * python/service.py (Object::__init__): Fixed typo + s/name/bus_name (patch from Dimitur Kirov) + + * python/examples/example-signal-emitter.py: import dbus.glib + to get the main loop and use glib mainloop instead of gtk so + X doesn't have to be running. + + * python/examples/example-signal-recipient.py: import dbus.glib + to get the main loop and use glib mainloop instead of gtk so + X doesn't have to be running. Import the decorators module + directly. + + * test/glib/Makefile.am: Added DIST_EXTRA files that distcheck + didn't pick up on but are needed to build + + * configure.in: upped version to 0.35.2 + + * bus/driver.c, bus/selinux.c, bus/selinux.h, dbus/dbus-protocol.h: + added Colin Walters' SELinux API rename patch from head + s/unix sercurity context/selinux security context/ + 2005-07-16 John (J5) Palmieri * python/Makefile.am: dbus_binding.pxd.in should be included diff --git a/NEWS b/NEWS index bfe67655..e582727b 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +D-BUS 0.35.2 (17 July 2005) +- Rename Unix Security Context to SELinux Security Context in API +- Fixed more dist errors that distcheck didn't pick up on +- Fixed various bugs in the python bindings that prevented them from working + D-BUS 0.35.1 (16 July 2005) === - Fixed dist error where python/dbus_bindings.pxd was being shipped diff --git a/bus/driver.c b/bus/driver.c index 8e8a5366..da4edaa7 100644 --- a/bus/driver.c +++ b/bus/driver.c @@ -1015,10 +1015,10 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, } static dbus_bool_t -bus_driver_handle_get_connection_unix_security_context (DBusConnection *connection, - BusTransaction *transaction, - DBusMessage *message, - DBusError *error) +bus_driver_handle_get_connection_selinux_security_context (DBusConnection *connection, + BusTransaction *transaction, + DBusMessage *message, + DBusError *error) { const char *service; DBusString str; @@ -1062,13 +1062,13 @@ bus_driver_handle_get_connection_unix_security_context (DBusConnection *connecti if (!context) { dbus_set_error (error, - DBUS_ERROR_UNIX_SECURITY_CONTEXT_UNKNOWN, + DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN, "Could not determine security context for '%s'", service); goto failed; } - if (! bus_selinux_append_context (reply, context)) - goto oom; + if (! bus_selinux_append_context (reply, context, error)) + goto failed; if (! bus_transaction_send_from_driver (transaction, connection, reply)) goto oom; @@ -1167,10 +1167,10 @@ struct DBUS_TYPE_STRING_AS_STRING, DBUS_TYPE_UINT32_AS_STRING, bus_driver_handle_get_connection_unix_process_id }, - { "GetConnectionUnixSecurityContext", - DBUS_TYPE_STRING_AS_STRING, + { "GetConnectionSELinuxSecurityContext", DBUS_TYPE_STRING_AS_STRING, - bus_driver_handle_get_connection_unix_security_context }, + DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING, + bus_driver_handle_get_connection_selinux_security_context }, { "ReloadConfig", "", "", diff --git a/bus/selinux.c b/bus/selinux.c index 2b88a60d..ad95f1c2 100644 --- a/bus/selinux.c +++ b/bus/selinux.c @@ -366,7 +366,7 @@ bus_selinux_check (BusSELinuxID *sender_sid, { if (!selinux_enabled) return TRUE; - + /* Make the security check. AVC checks enforcing mode here as well. */ if (avc_has_perm (SELINUX_SID_FROM_BUS (sender_sid), override_sid ? @@ -472,6 +472,7 @@ bus_selinux_allows_send (DBusConnection *sender, unsigned long spid, tpid; DBusString auxdata; dbus_bool_t ret; + dbus_bool_t string_alloced; if (!selinux_enabled) return TRUE; @@ -481,8 +482,10 @@ bus_selinux_allows_send (DBusConnection *sender, if (!proposed_recipient || !dbus_connection_get_unix_process_id (proposed_recipient, &tpid)) tpid = 0; + string_alloced = FALSE; if (!_dbus_string_init (&auxdata)) goto oom; + string_alloced = TRUE; if (!_dbus_string_append (&auxdata, "msgtype=")) goto oom; @@ -558,7 +561,8 @@ bus_selinux_allows_send (DBusConnection *sender, return ret; oom: - _dbus_string_free (&auxdata); + if (string_alloced) + _dbus_string_free (&auxdata); BUS_SET_OOM (error); return FALSE; @@ -569,18 +573,36 @@ bus_selinux_allows_send (DBusConnection *sender, dbus_bool_t bus_selinux_append_context (DBusMessage *message, - BusSELinuxID *context) + BusSELinuxID *sid, + DBusError *error) { #ifdef HAVE_SELINUX - /* Note if you change how the context is marshalled (e.g. to ay), - * you also need to change driver.c for the appropriate return value. - */ - return dbus_message_append_args (message, - DBUS_TYPE_STRING, - SELINUX_SID_FROM_BUS (context), - DBUS_TYPE_INVALID); + char *context; + + if (avc_sid_to_context (SELINUX_SID_FROM_BUS (sid), &context) < 0) + { + if (errno == ENOMEM) + BUS_SET_OOM (error); + else + dbus_set_error (error, DBUS_ERROR_FAILED, + "Error getting context from SID: %s\n", + _dbus_strerror (errno)); + return FALSE; + } + if (!dbus_message_append_args (message, + DBUS_TYPE_ARRAY, + DBUS_TYPE_BYTE, + &context, + strlen (context), + DBUS_TYPE_INVALID)) + { + _DBUS_SET_OOM (error); + return FALSE; + } + freecon (context); + return TRUE; #else - return FALSE; + return TRUE; #endif } @@ -893,14 +915,19 @@ bus_selinux_shutdown (void) if (!selinux_enabled) return; - sidput (bus_sid); - bus_sid = SECSID_WILD; - + _dbus_verbose ("AVC shutdown\n"); + + if (bus_sid != SECSID_WILD) + { + sidput (bus_sid); + bus_sid = SECSID_WILD; + #ifdef DBUS_ENABLE_VERBOSE_MODE - bus_avc_print_stats (); + bus_avc_print_stats (); #endif /* DBUS_ENABLE_VERBOSE_MODE */ - avc_destroy (); + avc_destroy (); + } #endif /* HAVE_SELINUX */ } diff --git a/bus/selinux.h b/bus/selinux.h index 22339bc1..0d8353d8 100644 --- a/bus/selinux.h +++ b/bus/selinux.h @@ -46,7 +46,8 @@ void bus_selinux_id_table_print (DBusHashTable *service_table); const char* bus_selinux_get_policy_root (void); dbus_bool_t bus_selinux_append_context (DBusMessage *message, - BusSELinuxID *context); + BusSELinuxID *context, + DBusError *error); dbus_bool_t bus_selinux_allows_acquire_service (DBusConnection *connection, BusSELinuxID *service_sid, diff --git a/configure.in b/configure.in index 0bad6d75..f3c454e0 100644 --- a/configure.in +++ b/configure.in @@ -3,7 +3,7 @@ AC_PREREQ(2.52) AC_INIT(dbus/dbus.h) -AM_INIT_AUTOMAKE(dbus, 0.35.1) +AM_INIT_AUTOMAKE(dbus, 0.35.2) AM_CONFIG_HEADER(config.h) diff --git a/dbus/dbus-protocol.h b/dbus/dbus-protocol.h index d9ac2434..fe51008d 100644 --- a/dbus/dbus-protocol.h +++ b/dbus/dbus-protocol.h @@ -237,7 +237,7 @@ extern "C" { #define DBUS_ERROR_SPAWN_FAILED "org.freedesktop.DBus.Error.Spawn.Failed" #define DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN "org.freedesktop.DBus.Error.UnixProcessIdUnknown" #define DBUS_ERROR_INVALID_SIGNATURE "org.freedesktop.DBus.Error.InvalidSignature" -#define DBUS_ERROR_UNIX_SECURITY_CONTEXT_UNKNOWN "org.freedesktop.DBus.Error.UnixSecurityContextUnknown" +#define DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN "org.freedesktop.DBus.Error.SELinuxSecurityContextUnknown" #define DBUS_INTROSPECT_1_0_XML_NAMESPACE "http://www.freedesktop.org/standards/dbus" #define DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" diff --git a/python/_dbus.py b/python/_dbus.py index 652d27bd..7bab5856 100644 --- a/python/_dbus.py +++ b/python/_dbus.py @@ -46,7 +46,6 @@ import dbus_bindings import dbus from proxies import * from exceptions import * -from services import * from matchrules import * import re diff --git a/python/examples/example-signal-emitter.py b/python/examples/example-signal-emitter.py index f81ac3fb..02eff893 100644 --- a/python/examples/example-signal-emitter.py +++ b/python/examples/example-signal-emitter.py @@ -2,7 +2,8 @@ import dbus import dbus.service -import gtk +import dbus.glib +import gobject class TestObject(dbus.service.Object): def __init__(self, bus_name, object_path='/org/designfu/TestService/object'): @@ -24,4 +25,5 @@ session_bus = dbus.SessionBus() name = dbus.service.BusName('org.designfu.TestService', bus=session_bus) object = TestObject(name) -gtk.main() +loop = gobject.MainLoop() +loop.run() diff --git a/python/examples/example-signal-recipient.py b/python/examples/example-signal-recipient.py index 681dd7c2..558a41f0 100644 --- a/python/examples/example-signal-recipient.py +++ b/python/examples/example-signal-recipient.py @@ -1,7 +1,8 @@ #!/usr/bin/env python -import gtk import dbus +import dbus.decorators +import dbus.glib import gobject def handle_reply(msg): @@ -11,7 +12,7 @@ def handle_error(e): print str(e) def emit_signal(): - #call the emitHelloSignal method async + #call the emitHelloSignal method object.emitHelloSignal(dbus_interface="org.designfu.TestService") #reply_handler = handle_reply, error_handler = handle_error) return True @@ -22,7 +23,7 @@ object = bus.get_object("org.designfu.TestService","/org/designfu/TestService/o def hello_signal_handler(hello_string): print ("Received signal and it says: " + hello_string) -@dbus.explicitly_pass_message +@dbus.decorators.explicitly_pass_message def catchall_signal_handler(*args, **keywords): #The dbus.handler directive passes in the special __dbus_message__ variable dbus_message = keywords["dbus_message"] @@ -33,7 +34,7 @@ def catchall_signal_handler(*args, **keywords): def catchall_hello_signals_handler(hello_string): print ("Received a hello signal and it says ") + hello_string -@dbus.explicitly_pass_message +@dbus.decorators.explicitly_pass_message def catchall_testservice_interface_handler(hello_string, dbus_message): print "org.designfu.TestService interface says " + hello_string + " when it sent signal " + dbus_message.get_member() @@ -48,5 +49,5 @@ gobject.timeout_add(2000, emit_signal) # Tell the remote object to emit the signal -gtk.main() - +loop = gobject.MainLoop() +loop.run() diff --git a/python/service.py b/python/service.py index 18a2c81b..f6a1c7fd 100644 --- a/python/service.py +++ b/python/service.py @@ -154,7 +154,7 @@ class Object: def __init__(self, bus_name, object_path): self._object_path = object_path self._name = bus_name - self._bus = name.get_bus() + self._bus = bus_name.get_bus() self._connection = self._bus.get_connection() diff --git a/test/glib/Makefile.am b/test/glib/Makefile.am index 04d9c644..cf837c8f 100644 --- a/test/glib/Makefile.am +++ b/test/glib/Makefile.am @@ -78,3 +78,8 @@ test_profile_SOURCES= \ test_profile_LDADD= $(DBUS_GLIB_THREADS_LIBS) $(top_builddir)/glib/libdbus-glib-1.la endif + +EXTRA_DIST = \ + my-object-marshal.list \ + test-service-glib.xml + -- cgit