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.
BusContext*
bus_context_new (const DBusString *config_file,
+ int print_addr_fd,
DBusError *error)
{
BusContext *context;
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,
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);
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);
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,
}
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)
{
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);
}
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);
"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="*"/>