diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | bus/bus.c | 43 | ||||
-rw-r--r-- | bus/bus.h | 1 | ||||
-rw-r--r-- | bus/dispatch.c | 9 | ||||
-rw-r--r-- | bus/driver.c | 6 | ||||
-rw-r--r-- | bus/main.c | 33 | ||||
-rw-r--r-- | bus/test.c | 2 | ||||
-rw-r--r-- | test/data/valid-config-files/debug-allow-all.conf.in | 1 |
8 files changed, 75 insertions, 34 deletions
@@ -1,5 +1,19 @@ 2003-04-06 Havoc Pennington <hp@pobox.com> + * bus/bus.c (bus_context_new): print the address in here, rather + than in main(), because we need to do it before forking the daemon + + * bus/dispatch.c (send_service_nonexistent_error): set the sender + on the service nonexistent error + + * bus/driver.c (bus_driver_handle_acquire_service): set the + sender on the AcquireService reply + + * test/data/valid-config-files/debug-allow-all.conf.in: Make test + server also listen on a UNIX socket so services can connect to it. + +2003-04-06 Havoc Pennington <hp@pobox.com> + * dbus/dbus-threads.c: Redo how the fake debug mutexes are done so it detects deadlocks and also we actually init threads when debugging. @@ -298,6 +298,7 @@ setup_server (BusContext *context, BusContext* bus_context_new (const DBusString *config_file, + int print_addr_fd, DBusError *error) { BusContext *context; @@ -498,6 +499,48 @@ bus_context_new (const DBusString *config_file, goto failed; } + /* Note that we don't know whether the print_addr_fd is + * one of the sockets we're using to listen on, or some + * other random thing. But I think the answer is "don't do + * that then" + */ + if (print_addr_fd >= 0) + { + DBusString addr; + const char *a = bus_context_get_address (context); + int bytes; + + _dbus_assert (a != NULL); + if (!_dbus_string_init (&addr)) + { + BUS_SET_OOM (error); + goto failed; + } + + if (!_dbus_string_append (&addr, a) || + !_dbus_string_append (&addr, "\n")) + { + _dbus_string_free (&addr); + BUS_SET_OOM (error); + goto failed; + } + + bytes = _dbus_string_get_length (&addr); + if (_dbus_write (print_addr_fd, &addr, 0, bytes) != bytes) + { + dbus_set_error (error, DBUS_ERROR_FAILED, + "Printing message bus address: %s\n", + _dbus_strerror (errno)); + _dbus_string_free (&addr); + goto failed; + } + + if (print_addr_fd > 2) + _dbus_close (print_addr_fd, NULL); + + _dbus_string_free (&addr); + } + /* Create activation subsystem */ context->activation = bus_activation_new (context, &full_address, @@ -41,6 +41,7 @@ typedef struct BusService BusService; typedef struct BusTransaction BusTransaction; BusContext* bus_context_new (const DBusString *config_file, + int print_addr_fd, DBusError *error); void bus_context_shutdown (BusContext *context); void bus_context_ref (BusContext *context); diff --git a/bus/dispatch.c b/bus/dispatch.c index 6e3a61e3..2e0fa9d2 100644 --- a/bus/dispatch.c +++ b/bus/dispatch.c @@ -137,7 +137,14 @@ send_service_nonexistent_error (BusTransaction *transaction, BUS_SET_OOM (error); return FALSE; } - + + if (!dbus_message_set_sender (error_reply, DBUS_SERVICE_DBUS)) + { + dbus_message_unref (error_reply); + BUS_SET_OOM (error); + return FALSE; + } + if (!bus_transaction_send_message (transaction, connection, error_reply)) { dbus_message_unref (error_reply); diff --git a/bus/driver.c b/bus/driver.c index 0cea1d6f..e01949fc 100644 --- a/bus/driver.c +++ b/bus/driver.c @@ -478,6 +478,12 @@ bus_driver_handle_acquire_service (DBusConnection *connection, goto out; } + if (!dbus_message_set_sender (reply, DBUS_SERVICE_DBUS)) + { + BUS_SET_OOM (error); + goto out; + } + if (service == NULL) { service = bus_registry_ensure (registry, @@ -216,7 +216,7 @@ main (int argc, char **argv) } dbus_error_init (&error); - context = bus_context_new (&config_file, &error); + context = bus_context_new (&config_file, print_addr_fd, &error); _dbus_string_free (&config_file); if (context == NULL) { @@ -225,37 +225,6 @@ main (int argc, char **argv) dbus_error_free (&error); exit (1); } - - /* Note that we don't know whether the print_addr_fd is - * one of the sockets we're using to listen on, or some - * other random thing. But I think the answer is "don't do - * that then" - */ - if (print_addr_fd >= 0) - { - DBusString addr; - const char *a = bus_context_get_address (context); - int bytes; - - _dbus_assert (a != NULL); - if (!_dbus_string_init (&addr) || - !_dbus_string_append (&addr, a) || - !_dbus_string_append (&addr, "\n")) - exit (1); - - bytes = _dbus_string_get_length (&addr); - if (_dbus_write (print_addr_fd, &addr, 0, bytes) != bytes) - { - _dbus_warn ("Failed to print message bus address: %s\n", - _dbus_strerror (errno)); - exit (1); - } - - if (print_addr_fd > 2) - _dbus_close (print_addr_fd, NULL); - - _dbus_string_free (&addr); - } /* FIXME we have to handle this properly below _dbus_set_signal_handler (SIGHUP, signal_handler); */ _dbus_set_signal_handler (SIGTERM, signal_handler); @@ -370,7 +370,7 @@ bus_context_new_test (const DBusString *test_data_dir, } dbus_error_init (&error); - context = bus_context_new (&config_file, &error); + context = bus_context_new (&config_file, -1, &error); if (context == NULL) { _DBUS_ASSERT_ERROR_IS_SET (&error); diff --git a/test/data/valid-config-files/debug-allow-all.conf.in b/test/data/valid-config-files/debug-allow-all.conf.in index ef46fde5..c4308988 100644 --- a/test/data/valid-config-files/debug-allow-all.conf.in +++ b/test/data/valid-config-files/debug-allow-all.conf.in @@ -4,6 +4,7 @@ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <listen>debug-pipe:name=test-server</listen> + <listen>unix:tmpdir=@TEST_SOCKET_DIR@</listen> <servicedir>@TEST_SERVICE_DIR@</servicedir> <policy context="default"> <allow send="*"/> |