27 #include "dbus-protocol.h"
28 #include "dbus-internals.h"
29 #include "dbus-message.h"
30 #include "dbus-marshal-validate.h"
31 #include "dbus-threads-internal.h"
32 #include "dbus-connection-internal.h"
33 #include "dbus-string.h"
81 unsigned int is_well_known : 1;
86 static dbus_int32_t bus_data_slot = -1;
112 addresses_shutdown_func (
void *data)
119 if (bus_connections[i] !=
NULL)
120 _dbus_warn_check_failed (
"dbus_shutdown() called but connections were still live. This probably means the application did not drop all its references to bus connections.\n");
123 bus_connection_addresses[i] =
NULL;
133 get_from_env (
char **connection_p,
141 if (s ==
NULL || *s ==
'\0')
146 return *connection_p !=
NULL;
151 init_session_address (
void)
160 "DBUS_SESSION_BUS_ADDRESS");
176 if (supported && retval)
180 else if (supported && !retval)
185 _dbus_warn (
"Dynamic session lookup supported but failed silently\n");
208 init_connections_unlocked (
void)
218 bus_connections[i] =
NULL;
231 _dbus_verbose (
"Filling in system bus address...\n");
234 "DBUS_SYSTEM_BUS_ADDRESS"))
248 _dbus_verbose (
" used default system bus \"%s\"\n",
252 _dbus_verbose (
" used env var system bus \"%s\"\n",
257 _dbus_verbose (
"Filling in session bus address...\n");
259 if (!init_session_address ())
268 _dbus_verbose (
"Filling in activation bus address...\n");
271 "DBUS_STARTER_ADDRESS"))
274 _dbus_verbose (
" \"%s\"\n", bus_connection_addresses[DBUS_BUS_STARTER] ?
275 bus_connection_addresses[DBUS_BUS_STARTER] :
"none set");
285 _dbus_verbose (
"Bus activation type was set to \"%s\"\n", s);
287 if (strcmp (s,
"system") == 0)
289 else if (strcmp (s,
"session") == 0)
326 bus_data_free (
void *data)
343 bus_connections[i] =
NULL;
415 if (bus_connections[i] == connection)
417 bus_connections[i] =
NULL;
435 _dbus_return_val_if_error_is_set (error,
NULL);
441 if (!init_connections_unlocked ())
443 _DBUS_SET_OOM (error);
459 bus_connection_addresses[activation_bus_type] !=
NULL)
460 type = activation_bus_type;
462 if (!
private && bus_connections[type] !=
NULL)
464 connection = bus_connections[type];
469 address = bus_connection_addresses[address_type];
473 "Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)");
501 bus_connections[type] = connection;
511 bd = ensure_bus_data (connection);
519 if (connection ==
NULL)
520 _DBUS_ASSERT_ERROR_IS_SET (error);
563 return internal_bus_get (type,
FALSE, error);
595 return internal_bus_get (type,
TRUE, error);
656 _dbus_return_val_if_fail (connection !=
NULL,
FALSE);
657 _dbus_return_val_if_error_is_set (error,
FALSE);
665 bd = ensure_bus_data (connection);
668 _DBUS_SET_OOM (error);
674 _dbus_verbose (
"Ignoring attempt to register the same DBusConnection %s with the message bus a second time.\n",
688 _DBUS_SET_OOM (error);
706 _DBUS_SET_OOM (error);
722 _DBUS_ASSERT_ERROR_IS_SET (error);
764 const char *unique_name)
769 _dbus_return_val_if_fail (connection !=
NULL,
FALSE);
770 _dbus_return_val_if_fail (unique_name !=
NULL,
FALSE);
774 bd = ensure_bus_data (connection);
811 const char *unique_name =
NULL;
813 _dbus_return_val_if_fail (connection !=
NULL,
NULL);
817 bd = ensure_bus_data (connection);
862 _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name),
DBUS_UID_UNSET);
868 "GetConnectionUnixUser");
872 _DBUS_SET_OOM (error);
881 _DBUS_SET_OOM (error);
892 _DBUS_ASSERT_ERROR_IS_SET (error);
898 _DBUS_ASSERT_ERROR_IS_SET (error);
907 _DBUS_ASSERT_ERROR_IS_SET (error);
914 return (
unsigned long) uid;
941 const char *v_STRING;
943 _dbus_return_val_if_fail (connection !=
NULL,
NULL);
944 _dbus_return_val_if_error_is_set (error,
NULL);
953 _DBUS_SET_OOM (error);
964 _DBUS_ASSERT_ERROR_IS_SET (error);
970 _DBUS_ASSERT_ERROR_IS_SET (error);
980 _DBUS_ASSERT_ERROR_IS_SET (error);
990 _DBUS_SET_OOM (error);
1106 dbus_uint32_t result;
1108 _dbus_return_val_if_fail (connection !=
NULL, 0);
1109 _dbus_return_val_if_fail (name !=
NULL, 0);
1110 _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name), 0);
1111 _dbus_return_val_if_error_is_set (error, 0);
1118 if (message ==
NULL)
1120 _DBUS_SET_OOM (error);
1130 _DBUS_SET_OOM (error);
1141 _DBUS_ASSERT_ERROR_IS_SET (error);
1147 _DBUS_ASSERT_ERROR_IS_SET (error);
1156 _DBUS_ASSERT_ERROR_IS_SET (error);
1191 dbus_uint32_t result;
1193 _dbus_return_val_if_fail (connection !=
NULL, 0);
1194 _dbus_return_val_if_fail (name !=
NULL, 0);
1195 _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name), 0);
1196 _dbus_return_val_if_error_is_set (error, 0);
1203 if (message ==
NULL)
1205 _DBUS_SET_OOM (error);
1214 _DBUS_SET_OOM (error);
1225 _DBUS_ASSERT_ERROR_IS_SET (error);
1231 _DBUS_ASSERT_ERROR_IS_SET (error);
1240 _DBUS_ASSERT_ERROR_IS_SET (error);
1275 _dbus_return_val_if_fail (connection !=
NULL,
FALSE);
1276 _dbus_return_val_if_fail (name !=
NULL,
FALSE);
1277 _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name),
FALSE);
1278 _dbus_return_val_if_error_is_set (error,
FALSE);
1284 if (message ==
NULL)
1286 _DBUS_SET_OOM (error);
1295 _DBUS_SET_OOM (error);
1304 _DBUS_ASSERT_ERROR_IS_SET (error);
1312 _DBUS_ASSERT_ERROR_IS_SET (error);
1346 dbus_uint32_t flags,
1347 dbus_uint32_t *result,
1353 _dbus_return_val_if_fail (connection !=
NULL,
FALSE);
1354 _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name),
FALSE);
1359 "StartServiceByName");
1365 _DBUS_SET_OOM (error);
1375 _DBUS_ASSERT_ERROR_IS_SET (error);
1381 _DBUS_ASSERT_ERROR_IS_SET (error);
1386 if (result !=
NULL &&
1390 _DBUS_ASSERT_ERROR_IS_SET (error);
1413 _DBUS_ASSERT_ERROR_IS_SET (error);
1520 _dbus_return_if_fail (rule !=
NULL);
1529 _DBUS_SET_OOM (error);
1537 _DBUS_SET_OOM (error);
1541 send_no_return_values (connection, msg, error);
1570 _dbus_return_if_fail (rule !=
NULL);
1581 _DBUS_SET_OOM (error);
1585 send_no_return_values (connection, msg, error);