summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--bus/bus.c43
-rw-r--r--bus/bus.h1
-rw-r--r--bus/dispatch.c9
-rw-r--r--bus/driver.c6
-rw-r--r--bus/main.c33
-rw-r--r--bus/test.c2
-rw-r--r--test/data/valid-config-files/debug-allow-all.conf.in1
8 files changed, 75 insertions, 34 deletions
diff --git a/ChangeLog b/ChangeLog
index 9bb927ff..ede733b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/bus/bus.c b/bus/bus.c
index e426706a..880f35d1 100644
--- a/bus/bus.c
+++ b/bus/bus.c
@@ -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,
diff --git a/bus/bus.h b/bus/bus.h
index aa9f848d..bbb0d481 100644
--- a/bus/bus.h
+++ b/bus/bus.h
@@ -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,
diff --git a/bus/main.c b/bus/main.c
index 119520ff..d18d61ac 100644
--- a/bus/main.c
+++ b/bus/main.c
@@ -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);
diff --git a/bus/test.c b/bus/test.c
index 00a522c6..cf3ef8e8 100644
--- a/bus/test.c
+++ b/bus/test.c
@@ -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="*"/>