1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2c414488fe62605ebda5e875fc2db05c6b3dd199fHavoc Pennington/* driver.c Bus client (driver) 3aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 451781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * Copyright (C) 2003 CodeFactory AB 55b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington * Copyright (C) 2003, 2004, 2005 Red Hat, Inc. 6aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 743605a6f4e78a8c28afb4b1e924dff0301e0e95cHavoc Pennington * Licensed under the Academic Free License version 2.1 8b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering * 9aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * This program is free software; you can redistribute it and/or modify 10aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * it under the terms of the GNU General Public License as published by 11aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * the Free Software Foundation; either version 2 of the License, or 12aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * (at your option) any later version. 13aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 14aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * This program is distributed in the hope that it will be useful, 15aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * but WITHOUT ANY WARRANTY; without even the implied warranty of 16aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * GNU General Public License for more details. 18b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering * 19aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * You should have received a copy of the GNU General Public License 20aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * along with this program; if not, write to the Free Software 21dc33f4f7749ed303374ebdf00e48ea8a471afd25Tobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 23aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson */ 24aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 25dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h> 26f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson#include "activation.h" 27aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include "connection.h" 28aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include "driver.h" 2939dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson#include "dispatch.h" 30aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include "services.h" 316c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters#include "selinux.h" 32a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington#include "signals.h" 3302dfd4fb3427a6afef6b9b99d39de6248a20e0cbAnders Carlsson#include "utils.h" 34aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include <dbus/dbus-string.h> 3539dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson#include <dbus/dbus-internals.h> 36edecaa4abcc87712d470b9dc0f2d124417b3eebfColin Walters#include <dbus/dbus-message.h> 37030cc1e53c6216853e08e27b92f72db80d001873Colin Walters#include <dbus/dbus-marshal-recursive.h> 38aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include <string.h> 39aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 4029560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t bus_driver_send_welcome_message (DBusConnection *connection, 4129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *hello_message, 4229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 4329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error); 4429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 4529560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 4685f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieubus_driver_send_service_owner_changed (const char *service_name, 4785f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu const char *old_owner, 4885f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu const char *new_owner, 4985f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu BusTransaction *transaction, 5085f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu DBusError *error) 51a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson{ 5239dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson DBusMessage *message; 5329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 549c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *null_service; 5590ed1d84588a84697051e643175452c50d682eceHavoc Pennington 5690ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 579c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington 589c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington null_service = ""; 598873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington _dbus_verbose ("sending name owner changed: %s [%s -> %s]\n", 60b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering service_name, 61b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering old_owner ? old_owner : null_service, 6285f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu new_owner ? new_owner : null_service); 633f4086f0fdd1cc7fc03585ec9f750897fb3c1d55Anders Carlsson 64248895207dc15914ac7970a6d1431308075dca1dColin Walters message = dbus_message_new_signal (DBUS_PATH_DBUS, 65248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_DBUS, 668873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "NameOwnerChanged"); 67b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 6829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 6929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 7029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 7129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 7229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 73b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 74248895207dc15914ac7970a6d1431308075dca1dColin Walters if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS)) 7585f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu goto oom; 7685f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu 7785f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu if (!dbus_message_append_args (message, 789c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &service_name, 799c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, old_owner ? &old_owner : &null_service, 809c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, new_owner ? &new_owner : &null_service, 81e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 8285f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu goto oom; 8339dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 84dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_assert (dbus_message_has_signature (message, "sss")); 85b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 86a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington retval = bus_dispatch_matches (transaction, NULL, NULL, message, error); 8729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 8829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 8929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 90a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 9185f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu oom: 92a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson dbus_message_unref (message); 9385f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu BUS_SET_OOM (error); 9485f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu return FALSE; 95a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson} 96a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 9729560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 98ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_send_service_lost (DBusConnection *connection, 9929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *service_name, 10029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 10129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 102ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 103ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *message; 104ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 10590ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 106b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 107248895207dc15914ac7970a6d1431308075dca1dColin Walters message = dbus_message_new_signal (DBUS_PATH_DBUS, 108248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_DBUS, 1098873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "NameLost"); 110b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 11129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 11229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 11329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 11429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 11529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 116b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 117b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) || 118b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington !dbus_message_append_args (message, 1199c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &service_name, 120e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 12129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 12229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 12329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 12429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 12529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 12629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 127777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, message)) 12829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 12929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 13029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 13129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 13229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 13329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 13429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 13529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 13629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 13729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 138ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 139ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 14029560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 141ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_send_service_acquired (DBusConnection *connection, 14229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *service_name, 14329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 14429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 145ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 146ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *message; 147ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 14890ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 149b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 150248895207dc15914ac7970a6d1431308075dca1dColin Walters message = dbus_message_new_signal (DBUS_PATH_DBUS, 151248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_DBUS, 1528873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "NameAcquired"); 153c9cd648f115759176d35508e9007dc5520a0dd3fHavoc Pennington 15429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 15529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 15629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 15729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 15829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 159b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 160b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) || 161b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington !dbus_message_append_args (message, 1629c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &service_name, 163e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 16429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 16529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 16629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 16729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 16829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 16929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 170777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, message)) 17129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 17229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 17329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 17429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 17529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 17629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 17729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 17829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 17929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 18029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 181ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 182ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 183aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlssonstatic dbus_bool_t 1846ecc14ffabcffb69aa938a67940db48272e05046Havoc Penningtoncreate_unique_client_name (BusRegistry *registry, 1856ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington DBusString *str) 186aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 187d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* We never want to use the same unique client name twice, because 188d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * we want to guarantee that if you send a message to a given unique 189d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * name, you always get the same application. So we use two numbers 190d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * for INT_MAX * INT_MAX combinations, should be pretty safe against 191d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * wraparound. 192d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington */ 193b3bd48edfc1aab0a9dc64bfa4c380d845d218e73Havoc Pennington /* FIXME these should be in BusRegistry rather than static vars */ 194d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington static int next_major_number = 0; 195d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington static int next_minor_number = 0; 196d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington int len; 197b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 198aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson len = _dbus_string_get_length (str); 199b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 200d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington while (TRUE) 201aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson { 202d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* start out with 1-0, go to 1-1, 1-2, 1-3, 203d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * up to 1-MAXINT, then 2-0, 2-1, etc. 204d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington */ 205d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (next_minor_number <= 0) 206d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington { 207d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_major_number += 1; 208d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_minor_number = 0; 209d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (next_major_number <= 0) 210d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert_not_reached ("INT_MAX * INT_MAX clients were added"); 211d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington } 212d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 213d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert (next_major_number > 0); 214d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert (next_minor_number >= 0); 215d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 216d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* appname:MAJOR-MINOR */ 217b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 218d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append (str, ":")) 219d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 220b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 221d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append_int (str, next_major_number)) 222d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 223d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 22475742242000e782719bc1656f0a7da72b059e88eHavoc Pennington if (!_dbus_string_append (str, ".")) 225d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 226b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 227d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append_int (str, next_minor_number)) 228d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 229d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 230d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_minor_number += 1; 231b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 232aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson /* Check if a client with the name exists */ 2336ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (bus_registry_lookup (registry, str) == NULL) 234aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson break; 235aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 236d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* drop the number again, try the next one. */ 237aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_set_length (str, len); 238aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson } 239aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 240aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson return TRUE; 241aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 242aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 24329560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 244a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlssonbus_driver_handle_hello (DBusConnection *connection, 24529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 24629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 24729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 248aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 249aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusString unique_name; 250aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson BusService *service; 25129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 2526ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 253983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington BusConnections *connections; 25490ed1d84588a84697051e643175452c50d682eceHavoc Pennington 25590ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 256983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington 2571658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu if (bus_connection_is_active (connection)) 2581658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu { 2591658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu /* We already handled an Hello message for this connection. */ 2601658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu dbus_set_error (error, DBUS_ERROR_FAILED, 2611658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu "Already handled an Hello message"); 2621658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu return FALSE; 2631658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu } 2641658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu 265983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington /* Note that when these limits are exceeded we don't disconnect the 266983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * connection; we just sort of leave it hanging there until it times 267983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * out or disconnects itself or is dropped due to the max number of 268983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * incomplete connections. It's even OK if the connection wants to 269983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * retry the hello message, we support that. 270983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington */ 271983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington connections = bus_connection_get_connections (connection); 272983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington if (!bus_connections_check_limits (connections, connection, 273983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington error)) 274983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington { 275983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 276983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington return FALSE; 277983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington } 278b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 279fa05de9230d62e7c427b5313796fc6ccd4d0ff60Havoc Pennington if (!_dbus_string_init (&unique_name)) 28029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 28129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 28229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 28329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 284f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 28529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 2866ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 2876ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 288b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 2896ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (!create_unique_client_name (registry, &unique_name)) 29029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 29129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 29229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 29329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 29497ee8d189948c9f2c86464ca33f82e6daeaedc72Anders Carlsson 295e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington if (!bus_connection_complete (connection, &unique_name, error)) 29629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 297e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 29829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 29929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 300b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 30129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_set_sender (message, 30229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington bus_connection_get_name (connection))) 30329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 30429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 30529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 30629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 307b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 30829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!bus_driver_send_welcome_message (connection, message, transaction, error)) 30929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 31097ee8d189948c9f2c86464ca33f82e6daeaedc72Anders Carlsson 311aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson /* Create the service */ 3126ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington service = bus_registry_ensure (registry, 3131a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J &unique_name, connection, 0, transaction, error); 31429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (service == NULL) 31529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 316b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 317a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_assert (bus_connection_is_active (connection)); 31829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 319b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 32029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out_0: 321aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_free (&unique_name); 32229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 323aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 324aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 32529560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 326aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlssonbus_driver_send_welcome_message (DBusConnection *connection, 32729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *hello_message, 32829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 32929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 330aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 331aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusMessage *welcome; 332aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson const char *name; 33390ed1d84588a84697051e643175452c50d682eceHavoc Pennington 33490ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 335b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 336aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson name = bus_connection_get_name (connection); 337aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_assert (name != NULL); 338b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 339b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington welcome = dbus_message_new_method_return (hello_message); 34029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (welcome == NULL) 34129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 34229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 34329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 34429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 345b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 34629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_append_args (welcome, 3479c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &name, 348e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 34929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 35029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 35129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 35229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 35329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 35429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 3555b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _dbus_assert (dbus_message_has_signature (welcome, DBUS_TYPE_STRING_AS_STRING)); 356b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 357777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, welcome)) 35829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 35929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 36029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 36129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 36229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 36329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 36429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 36529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 36629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 36729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 368aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 369aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 37029560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 371a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlssonbus_driver_handle_list_services (DBusConnection *connection, 37229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 37329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 37429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 375a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson{ 376a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson DBusMessage *reply; 37729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington int len; 378a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson char **services; 3796ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 3809c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington int i; 3819c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBusMessageIter iter; 3829c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBusMessageIter sub; 38390ed1d84588a84697051e643175452c50d682eceHavoc Pennington 38490ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 385b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 3866ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 387b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 388b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 38929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 39029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 39129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 39229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 39329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 394a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 3956ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (!bus_registry_list_services (registry, &services, &len)) 39629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 39729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 39829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 39929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 40029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 4019c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington 40231988af4089f3793940417535f8eabaae1ac26c8Havoc Pennington dbus_message_iter_init_append (reply, &iter); 403b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 4049c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, 4059c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING_AS_STRING, 4069c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington &sub)) 40729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 40829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_free_string_array (services); 40929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 41029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 41129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 41229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 41339dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 414970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington { 415970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington /* Include the bus driver in the list */ 416248895207dc15914ac7970a6d1431308075dca1dColin Walters const char *v_STRING = DBUS_SERVICE_DBUS; 417970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING, 418970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington &v_STRING)) 419970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington { 420970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington dbus_free_string_array (services); 421970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington dbus_message_unref (reply); 422970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington BUS_SET_OOM (error); 423970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington return FALSE; 424970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington } 425970be5fda36ea575973a9e7f25389e2ef173b940Havoc Pennington } 426b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 4279c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington i = 0; 4289c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington while (i < len) 4299c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington { 4309c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING, 4319c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington &services[i])) 4329c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington { 4339c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_free_string_array (services); 4349c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_message_unref (reply); 4359c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington BUS_SET_OOM (error); 4369c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington return FALSE; 4379c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington } 4389c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington ++i; 4399c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington } 4409c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington 4417628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_free_string_array (services); 4427628b541258d906e27e2000a402ed2d02383479cJohn (J 4439c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_iter_close_container (&iter, &sub)) 4449c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington { 4459c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_message_unref (reply); 4469c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington BUS_SET_OOM (error); 4479c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington return FALSE; 4489c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington } 449b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 4507628b541258d906e27e2000a402ed2d02383479cJohn (J if (!bus_transaction_send_from_driver (transaction, connection, reply)) 4517628b541258d906e27e2000a402ed2d02383479cJohn (J { 4527628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_unref (reply); 4537628b541258d906e27e2000a402ed2d02383479cJohn (J BUS_SET_OOM (error); 4547628b541258d906e27e2000a402ed2d02383479cJohn (J return FALSE; 4557628b541258d906e27e2000a402ed2d02383479cJohn (J } 4567628b541258d906e27e2000a402ed2d02383479cJohn (J else 4577628b541258d906e27e2000a402ed2d02383479cJohn (J { 4587628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_unref (reply); 4597628b541258d906e27e2000a402ed2d02383479cJohn (J return TRUE; 4607628b541258d906e27e2000a402ed2d02383479cJohn (J } 4617628b541258d906e27e2000a402ed2d02383479cJohn (J} 4627628b541258d906e27e2000a402ed2d02383479cJohn (J 4637628b541258d906e27e2000a402ed2d02383479cJohn (Jstatic dbus_bool_t 4647628b541258d906e27e2000a402ed2d02383479cJohn (Jbus_driver_handle_list_activatable_services (DBusConnection *connection, 4657628b541258d906e27e2000a402ed2d02383479cJohn (J BusTransaction *transaction, 4667628b541258d906e27e2000a402ed2d02383479cJohn (J DBusMessage *message, 4677628b541258d906e27e2000a402ed2d02383479cJohn (J DBusError *error) 4687628b541258d906e27e2000a402ed2d02383479cJohn (J{ 4697628b541258d906e27e2000a402ed2d02383479cJohn (J DBusMessage *reply; 4707628b541258d906e27e2000a402ed2d02383479cJohn (J int len; 4717628b541258d906e27e2000a402ed2d02383479cJohn (J char **services; 4727628b541258d906e27e2000a402ed2d02383479cJohn (J BusActivation *activation; 4737628b541258d906e27e2000a402ed2d02383479cJohn (J int i; 4747628b541258d906e27e2000a402ed2d02383479cJohn (J DBusMessageIter iter; 4757628b541258d906e27e2000a402ed2d02383479cJohn (J DBusMessageIter sub; 4767628b541258d906e27e2000a402ed2d02383479cJohn (J 4777628b541258d906e27e2000a402ed2d02383479cJohn (J _DBUS_ASSERT_ERROR_IS_CLEAR (error); 4787628b541258d906e27e2000a402ed2d02383479cJohn (J 4797628b541258d906e27e2000a402ed2d02383479cJohn (J activation = bus_connection_get_activation (connection); 4807628b541258d906e27e2000a402ed2d02383479cJohn (J 4817628b541258d906e27e2000a402ed2d02383479cJohn (J reply = dbus_message_new_method_return (message); 4827628b541258d906e27e2000a402ed2d02383479cJohn (J if (reply == NULL) 4837628b541258d906e27e2000a402ed2d02383479cJohn (J { 4847628b541258d906e27e2000a402ed2d02383479cJohn (J BUS_SET_OOM (error); 4857628b541258d906e27e2000a402ed2d02383479cJohn (J return FALSE; 4867628b541258d906e27e2000a402ed2d02383479cJohn (J } 4877628b541258d906e27e2000a402ed2d02383479cJohn (J 4887628b541258d906e27e2000a402ed2d02383479cJohn (J if (!bus_activation_list_services (activation, &services, &len)) 4897628b541258d906e27e2000a402ed2d02383479cJohn (J { 4907628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_unref (reply); 4917628b541258d906e27e2000a402ed2d02383479cJohn (J BUS_SET_OOM (error); 4927628b541258d906e27e2000a402ed2d02383479cJohn (J return FALSE; 4937628b541258d906e27e2000a402ed2d02383479cJohn (J } 4947628b541258d906e27e2000a402ed2d02383479cJohn (J 4957628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_iter_init_append (reply, &iter); 4967628b541258d906e27e2000a402ed2d02383479cJohn (J 4977628b541258d906e27e2000a402ed2d02383479cJohn (J if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, 4987628b541258d906e27e2000a402ed2d02383479cJohn (J DBUS_TYPE_STRING_AS_STRING, 4997628b541258d906e27e2000a402ed2d02383479cJohn (J &sub)) 5007628b541258d906e27e2000a402ed2d02383479cJohn (J { 5017628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_free_string_array (services); 5027628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_unref (reply); 5037628b541258d906e27e2000a402ed2d02383479cJohn (J BUS_SET_OOM (error); 5047628b541258d906e27e2000a402ed2d02383479cJohn (J return FALSE; 5057628b541258d906e27e2000a402ed2d02383479cJohn (J } 5067628b541258d906e27e2000a402ed2d02383479cJohn (J 5077628b541258d906e27e2000a402ed2d02383479cJohn (J { 5087628b541258d906e27e2000a402ed2d02383479cJohn (J /* Include the bus driver in the list */ 5097628b541258d906e27e2000a402ed2d02383479cJohn (J const char *v_STRING = DBUS_SERVICE_DBUS; 5107628b541258d906e27e2000a402ed2d02383479cJohn (J if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING, 5117628b541258d906e27e2000a402ed2d02383479cJohn (J &v_STRING)) 5127628b541258d906e27e2000a402ed2d02383479cJohn (J { 5137628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_free_string_array (services); 5147628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_unref (reply); 5157628b541258d906e27e2000a402ed2d02383479cJohn (J BUS_SET_OOM (error); 5167628b541258d906e27e2000a402ed2d02383479cJohn (J return FALSE; 5177628b541258d906e27e2000a402ed2d02383479cJohn (J } 5187628b541258d906e27e2000a402ed2d02383479cJohn (J } 5197628b541258d906e27e2000a402ed2d02383479cJohn (J 5207628b541258d906e27e2000a402ed2d02383479cJohn (J i = 0; 5217628b541258d906e27e2000a402ed2d02383479cJohn (J while (i < len) 5227628b541258d906e27e2000a402ed2d02383479cJohn (J { 5237628b541258d906e27e2000a402ed2d02383479cJohn (J if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING, 5247628b541258d906e27e2000a402ed2d02383479cJohn (J &services[i])) 5257628b541258d906e27e2000a402ed2d02383479cJohn (J { 5267628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_free_string_array (services); 5277628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_unref (reply); 5287628b541258d906e27e2000a402ed2d02383479cJohn (J BUS_SET_OOM (error); 5297628b541258d906e27e2000a402ed2d02383479cJohn (J return FALSE; 5307628b541258d906e27e2000a402ed2d02383479cJohn (J } 5317628b541258d906e27e2000a402ed2d02383479cJohn (J ++i; 5327628b541258d906e27e2000a402ed2d02383479cJohn (J } 5337628b541258d906e27e2000a402ed2d02383479cJohn (J 53429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_free_string_array (services); 5357628b541258d906e27e2000a402ed2d02383479cJohn (J 5367628b541258d906e27e2000a402ed2d02383479cJohn (J if (!dbus_message_iter_close_container (&iter, &sub)) 5377628b541258d906e27e2000a402ed2d02383479cJohn (J { 5387628b541258d906e27e2000a402ed2d02383479cJohn (J dbus_message_unref (reply); 5397628b541258d906e27e2000a402ed2d02383479cJohn (J BUS_SET_OOM (error); 5407628b541258d906e27e2000a402ed2d02383479cJohn (J return FALSE; 5417628b541258d906e27e2000a402ed2d02383479cJohn (J } 5427628b541258d906e27e2000a402ed2d02383479cJohn (J 543777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 544a1a53c32422230fb76e8e3bca67c877dd2857563Havoc Pennington { 54529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 54629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 54729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 54829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 54929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 55029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 55129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 55229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 553a1a53c32422230fb76e8e3bca67c877dd2857563Havoc Pennington } 554a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson} 555a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 55629560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 55734e6c6ff31e0bd27bf18c0e3c68b3a1ea9f0448dAnders Carlssonbus_driver_handle_acquire_service (DBusConnection *connection, 55829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 55929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 56029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 561aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 562ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *reply; 563aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusString service_name; 5649c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *name; 565b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen dbus_uint32_t service_reply; 5668a2c91b8a549402040c94b45b063311975583efdOlivier Andrieu dbus_uint32_t flags; 56729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 5686ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 56990ed1d84588a84697051e643175452c50d682eceHavoc Pennington 57090ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 571b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 5726ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 573b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 574c5020ac870c5990a36c3576453cc23431213e8bfAlexander Larsson if (!dbus_message_get_args (message, error, 57529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 57629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_UINT32, &flags, 577e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 57829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 579b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 58098ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington _dbus_verbose ("Trying to own name %s with flags 0x%x\n", name, flags); 581b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 5826c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington retval = FALSE; 5836c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington reply = NULL; 584aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 585aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_init_const (&service_name, name); 586ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 5876be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington if (!bus_registry_acquire_service (registry, connection, 5886be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington &service_name, flags, 5896be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington &service_reply, transaction, 5906be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington error)) 5916be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington goto out; 592b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 593b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 59429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 59529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 59629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 59729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 598ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson } 59929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 6009c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_append_args (reply, DBUS_TYPE_UINT32, &service_reply, DBUS_TYPE_INVALID)) 60129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 60229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 60329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 60429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 605ba60374e251cca8fe351b7dd4def595069323885James Willcox 606777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 60729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 60829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 60929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 61029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 61129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 61229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 613b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 61429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 61529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply) 61629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 61729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 618b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering} 619aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 62029560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 621b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueenbus_driver_handle_release_service (DBusConnection *connection, 622b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen BusTransaction *transaction, 623b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBusMessage *message, 624b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBusError *error) 625b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen{ 626b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBusMessage *reply; 627b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBusString service_name; 628b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen const char *name; 629b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen dbus_uint32_t service_reply; 630b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen dbus_bool_t retval; 631b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen BusRegistry *registry; 632b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 633b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen _DBUS_ASSERT_ERROR_IS_CLEAR (error); 634b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 635b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen registry = bus_connection_get_registry (connection); 636b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 637b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen if (!dbus_message_get_args (message, error, 638b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBUS_TYPE_STRING, &name, 639b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBUS_TYPE_INVALID)) 640b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen return FALSE; 641b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 642b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen _dbus_verbose ("Trying to release name %s\n", name); 643b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 644b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen retval = FALSE; 645b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen reply = NULL; 646b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 647b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen _dbus_string_init_const (&service_name, name); 648b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 649b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen if (!bus_registry_release_service (registry, connection, 650b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen &service_name, &service_reply, 651b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen transaction, error)) 652b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen goto out; 653b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 654b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen reply = dbus_message_new_method_return (message); 655b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen if (reply == NULL) 656b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen { 657b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen BUS_SET_OOM (error); 658b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen goto out; 659b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen } 660b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 661b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen if (!dbus_message_append_args (reply, DBUS_TYPE_UINT32, &service_reply, DBUS_TYPE_INVALID)) 662b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen { 663b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen BUS_SET_OOM (error); 664b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen goto out; 665b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen } 666b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 667b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen if (!bus_transaction_send_from_driver (transaction, connection, reply)) 668b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen { 669b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen BUS_SET_OOM (error); 670b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen goto out; 671b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen } 672b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 673b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen retval = TRUE; 674b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 675b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen out: 676b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen if (reply) 677b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen dbus_message_unref (reply); 678b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen return retval; 679b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen} 680b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen 681b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueenstatic dbus_bool_t 682ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_handle_service_exists (DBusConnection *connection, 68329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 68429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 68529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 686ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 687ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *reply; 688ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusString service_name; 689ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson BusService *service; 69062e465339a306fa564b69935da494dad6e1b474aHavoc Pennington dbus_bool_t service_exists; 6919c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *name; 69229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 6936ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 69490ed1d84588a84697051e643175452c50d682eceHavoc Pennington 69590ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 696b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 6976ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 698b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 69929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_get_args (message, error, 70029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 701e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 70229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 703ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 70429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 7052091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge 706248895207dc15914ac7970a6d1431308075dca1dColin Walters if (strcmp (name, DBUS_SERVICE_DBUS) == 0) 7072091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge { 7082091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge service_exists = TRUE; 7092091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge } 7102091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge else 7112091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge { 7122091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge _dbus_string_init_const (&service_name, name); 7132091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge service = bus_registry_lookup (registry, &service_name); 7142091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge service_exists = service != NULL; 7152091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge } 716b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 717b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 71829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 71929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 72029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 72129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 72229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 72329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 72429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_append_args (reply, 7259c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_BOOLEAN, &service_exists, 72629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 0)) 72729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 72829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 72929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 73029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 73129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 732777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 73329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 73429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 73529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 73629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 73729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 73829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 739b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 74029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 74129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply) 74229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 74329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 74429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 745aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 74639dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 74729560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 748f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlssonbus_driver_handle_activate_service (DBusConnection *connection, 74929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 75029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 75129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 752f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson{ 753f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson dbus_uint32_t flags; 7549c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *name; 75529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 7566ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusActivation *activation; 7576ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 75890ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 759b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 7606ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington activation = bus_connection_get_activation (connection); 761b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 76229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_get_args (message, error, 76329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 76429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_UINT32, &flags, 765e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 766eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 767eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 7688873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington _dbus_verbose ("No memory to get arguments to StartServiceByName\n"); 769eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return FALSE; 770eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 771f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 77229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 773f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 77493f433a17a0aabff91a0384bf9c4f99c9cf30ae1Richard Hult if (!bus_activation_activate_service (activation, connection, transaction, FALSE, 775e55fd2c6706e41f6933e1656ac3da7527ee2514fHavoc Pennington message, name, error)) 776eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 777eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 778eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("bus_activation_activate_service() failed\n"); 779eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington goto out; 780eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 78129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 78229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 783b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 78429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 78529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 786f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson} 787f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 788a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 789a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonsend_ack_reply (DBusConnection *connection, 790a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 791a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 792a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 793a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 794a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *reply; 795a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 796edecaa4abcc87712d470b9dc0f2d124417b3eebfColin Walters if (dbus_message_get_no_reply (message)) 797edecaa4abcc87712d470b9dc0f2d124417b3eebfColin Walters return TRUE; 798edecaa4abcc87712d470b9dc0f2d124417b3eebfColin Walters 799a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington reply = dbus_message_new_method_return (message); 800a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (reply == NULL) 801a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 802a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 803a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 804a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 805a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 806a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 807a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 808a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 809a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_message_unref (reply); 810a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 811a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 812a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 813a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_message_unref (reply); 814b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 815a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 816a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 817a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 818a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 81937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strodebus_driver_handle_update_activation_environment (DBusConnection *connection, 82037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode BusTransaction *transaction, 82137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBusMessage *message, 82237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBusError *error) 82337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode{ 82437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_bool_t retval; 82537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode BusActivation *activation; 82637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBusMessageIter iter; 82737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBusMessageIter dict_iter; 82837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBusMessageIter dict_entry_iter; 82937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode int msg_type; 83037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode int array_type; 83137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode int key_type; 83237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBusList *keys, *key_link; 83337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBusList *values, *value_link; 83437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 83537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode _DBUS_ASSERT_ERROR_IS_CLEAR (error); 83637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 83737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode activation = bus_connection_get_activation (connection); 83837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 83937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_init (message, &iter); 84037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 84137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode /* The message signature has already been checked for us, 84237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode * so let's just assert it's right. 84337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode */ 84437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode msg_type = dbus_message_iter_get_arg_type (&iter); 84537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 84637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode _dbus_assert (msg_type == DBUS_TYPE_ARRAY); 84737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 84837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_recurse (&iter, &dict_iter); 84937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 85037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode retval = FALSE; 85137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 85237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode /* Then loop through the sent dictionary, add the location of 85337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode * the environment keys and values to lists. The result will 85437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode * be in reverse order, so we don't have to constantly search 85537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode * for the end of the list in a loop. 85637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode */ 85737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode keys = NULL; 85837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode values = NULL; 85937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode while ((array_type = dbus_message_iter_get_arg_type (&dict_iter)) == DBUS_TYPE_DICT_ENTRY) 86037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode { 86137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_recurse (&dict_iter, &dict_entry_iter); 86237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 86337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode while ((key_type = dbus_message_iter_get_arg_type (&dict_entry_iter)) == DBUS_TYPE_STRING) 86437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode { 86537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode char *key; 86637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode char *value; 86737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode int value_type; 86837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 86937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_get_basic (&dict_entry_iter, &key); 87037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_next (&dict_entry_iter); 87137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 87237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode value_type = dbus_message_iter_get_arg_type (&dict_entry_iter); 87337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 87437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (value_type != DBUS_TYPE_STRING) 87537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode break; 87637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 87737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_get_basic (&dict_entry_iter, &value); 87837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 87937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (!_dbus_list_append (&keys, key)) 88037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode { 88137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode BUS_SET_OOM (error); 88237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode break; 88337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode } 88437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 88537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (!_dbus_list_append (&values, value)) 88637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode { 88737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode BUS_SET_OOM (error); 88837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode break; 88937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode } 89037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 89137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_next (&dict_entry_iter); 89237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode } 89337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 89437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (key_type != DBUS_TYPE_INVALID) 89537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode break; 89637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 89737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode dbus_message_iter_next (&dict_iter); 89837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode } 89937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 90037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (array_type != DBUS_TYPE_INVALID) 90137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode goto out; 90237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 90337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode _dbus_assert (_dbus_list_get_length (&keys) == _dbus_list_get_length (&values)); 90437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 90537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode key_link = keys; 90637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode value_link = values; 90737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode while (key_link != NULL) 90837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode { 90937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode const char *key; 91037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode const char *value; 91137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 91237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode key = key_link->data; 91337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode value = value_link->data; 91437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 91537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (!bus_activation_set_environment_variable (activation, 91637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode key, value, error)) 91737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode { 91837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode _DBUS_ASSERT_ERROR_IS_SET (error); 91937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode _dbus_verbose ("bus_activation_set_environment_variable() failed\n"); 92037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode break; 92137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode } 92237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode key_link = _dbus_list_get_next_link (&keys, key_link); 92337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode value_link = _dbus_list_get_next_link (&values, value_link); 92437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode } 92537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 92637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode /* FIXME: We can fail early having set only some of the environment variables, 92737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode * (because of OOM failure). It's sort of hard to fix and it doesn't really 92837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode * matter, so we're punting for now. 92937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode */ 93037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (key_link != NULL) 93137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode goto out; 93237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 93337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode if (!send_ack_reply (connection, transaction, 93437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode message, error)) 93537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode goto out; 93637853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 93737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode retval = TRUE; 93837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 93937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode out: 94037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode _dbus_list_clear (&keys); 94137853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode _dbus_list_clear (&values); 94237853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode return retval; 94337853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode} 94437853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode 94537853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strodestatic dbus_bool_t 946a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonbus_driver_handle_add_match (DBusConnection *connection, 947a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 948a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 949a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 950a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 951a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchRule *rule; 9529c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *text; 953a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusString str; 954a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchmaker *matchmaker; 955b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 956a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 957a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 958a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington text = NULL; 959a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = NULL; 960a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 961a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (bus_connection_get_n_match_rules (connection) >= 962a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_context_get_max_match_rules_per_connection (bus_transaction_get_context (transaction))) 963a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 964a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED, 965a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "Connection \"%s\" is not allowed to add more match rules " 966a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "(increase limits in configuration file if required)", 967a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_connection_is_active (connection) ? 968a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_connection_get_name (connection) : 969a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "(inactive)"); 970a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 971a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 972b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 973a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!dbus_message_get_args (message, error, 974a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_STRING, &text, 975a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_INVALID)) 976a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 977a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_verbose ("No memory to get arguments to AddMatch\n"); 978a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 979a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 980a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 981a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_string_init_const (&str, text); 982a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 983a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = bus_match_rule_parse (connection, &str, error); 984a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule == NULL) 985a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 986a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 987a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington matchmaker = bus_connection_get_matchmaker (connection); 988a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 989a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_matchmaker_add_rule (matchmaker, rule)) 990a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 991a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 992a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 993a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 994a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 995a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!send_ack_reply (connection, transaction, 996a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington message, error)) 997a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 998a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_matchmaker_remove_rule (matchmaker, rule); 999a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 1000a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 1001b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1002a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 1003b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1004a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 1005a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1006a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington failed: 1007a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 1008a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule) 1009a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 1010a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 1011a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 1012a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1013a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 1014a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonbus_driver_handle_remove_match (DBusConnection *connection, 1015a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 1016a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 1017a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 1018a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 1019a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchRule *rule; 10209c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *text; 1021a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusString str; 1022a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchmaker *matchmaker; 1023b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1024a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1025a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1026a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington text = NULL; 1027a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = NULL; 1028b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1029a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!dbus_message_get_args (message, error, 1030a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_STRING, &text, 1031a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_INVALID)) 1032a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 1033a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_verbose ("No memory to get arguments to RemoveMatch\n"); 1034a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 1035a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 1036a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1037a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_string_init_const (&str, text); 1038a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1039a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = bus_match_rule_parse (connection, &str, error); 1040a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule == NULL) 1041a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 1042a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1043a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington /* Send the ack before we remove the rule, since the ack is undone 1044a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington * on transaction cancel, but rule removal isn't. 1045a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington */ 1046a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!send_ack_reply (connection, transaction, 1047a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington message, error)) 1048a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 1049b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1050a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington matchmaker = bus_connection_get_matchmaker (connection); 1051a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1052a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_matchmaker_remove_rule_by_value (matchmaker, rule, error)) 1053a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 1054a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1055a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 1056b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1057a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 1058a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1059a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington failed: 1060a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 1061a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule) 1062a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 1063a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 1064a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 1065a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 1066a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieustatic dbus_bool_t 1067a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieubus_driver_handle_get_service_owner (DBusConnection *connection, 1068a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusTransaction *transaction, 1069a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusMessage *message, 1070a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusError *error) 1071a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu{ 10729c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *text; 1073a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu const char *base_name; 1074a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusString str; 1075a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusRegistry *registry; 1076a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusService *service; 1077a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusMessage *reply; 1078b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1079a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1080a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1081a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu registry = bus_connection_get_registry (connection); 1082a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1083a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu text = NULL; 1084a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu reply = NULL; 1085a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1086a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! dbus_message_get_args (message, error, 1087a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_STRING, &text, 1088a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_INVALID)) 1089a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 1090a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1091a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _dbus_string_init_const (&str, text); 1092a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu service = bus_registry_lookup (registry, &str); 109341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (service == NULL && 1094248895207dc15914ac7970a6d1431308075dca1dColin Walters _dbus_string_equal_c_str (&str, DBUS_SERVICE_DBUS)) 109541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington { 109641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington /* ORG_FREEDESKTOP_DBUS owns itself */ 1097248895207dc15914ac7970a6d1431308075dca1dColin Walters base_name = DBUS_SERVICE_DBUS; 109841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington } 109941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington else if (service == NULL) 1100a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 1101b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering dbus_set_error (error, 110241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_ERROR_NAME_HAS_NO_OWNER, 110341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington "Could not get owner of name '%s': no such name", text); 1104a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 1105a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 110641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington else 1107a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 11081a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J base_name = bus_connection_get_name (bus_service_get_primary_owners_connection (service)); 110941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (base_name == NULL) 111041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington { 111141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington /* FIXME - how is this error possible? */ 111241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington dbus_set_error (error, 111341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_ERROR_FAILED, 111441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington "Could not determine unique name for '%s'", text); 111541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto failed; 111641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington } 1117b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering _dbus_assert (*base_name == ':'); 1118a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 111941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 112041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_assert (base_name != NULL); 1121a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1122a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu reply = dbus_message_new_method_return (message); 1123a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply == NULL) 1124a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 1125a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1126b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering if (! dbus_message_append_args (reply, 11279c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &base_name, 1128a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_INVALID)) 1129a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 1130b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1131a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 1132a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 1133a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1134a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 1135a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1136a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return TRUE; 1137a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1138a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu oom: 1139a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BUS_SET_OOM (error); 1140a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 1141a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu failed: 1142a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 1143a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply) 1144a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 1145a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return FALSE; 1146a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu} 1147a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 11481919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergstatic dbus_bool_t 11491a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (Jbus_driver_handle_list_queued_owners (DBusConnection *connection, 11501a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J BusTransaction *transaction, 11511a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBusMessage *message, 11521a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBusError *error) 11531a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J{ 11541a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J const char *text; 11551a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBusList *base_names; 11561a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBusList *link; 11571a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBusString str; 11581a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J BusRegistry *registry; 11591a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J BusService *service; 11601a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBusMessage *reply; 11611a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBusMessageIter iter, array_iter; 11621a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J char *dbus_service_name = DBUS_SERVICE_DBUS; 1163b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 11641a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J _DBUS_ASSERT_ERROR_IS_CLEAR (error); 11651a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 11661a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J registry = bus_connection_get_registry (connection); 11671a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 11681a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J base_names = NULL; 11691a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J text = NULL; 11701a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J reply = NULL; 11711a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 11721a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (! dbus_message_get_args (message, error, 11731a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_TYPE_STRING, &text, 11741a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_TYPE_INVALID)) 11751a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto failed; 11761a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 11771a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J _dbus_string_init_const (&str, text); 11781a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J service = bus_registry_lookup (registry, &str); 11791a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (service == NULL && 11801a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J _dbus_string_equal_c_str (&str, DBUS_SERVICE_DBUS)) 11811a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J { 11821a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J /* ORG_FREEDESKTOP_DBUS owns itself */ 11831a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (! _dbus_list_append (&base_names, dbus_service_name)) 11841a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto oom; 11851a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J } 11861a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J else if (service == NULL) 11871a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J { 1188b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering dbus_set_error (error, 11891a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_ERROR_NAME_HAS_NO_OWNER, 11901a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J "Could not get owners of name '%s': no such name", text); 11911a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto failed; 11921a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J } 11931a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J else 11941a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J { 1195b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering if (!bus_service_list_queued_owners (service, 11961a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J &base_names, 11971a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J error)) 11981a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto failed; 11991a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J } 12001a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12011a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J _dbus_assert (base_names != NULL); 12021a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12031a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J reply = dbus_message_new_method_return (message); 12041a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (reply == NULL) 12051a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto oom; 12061a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12071a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J dbus_message_iter_init_append (reply, &iter); 12081a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (!dbus_message_iter_open_container (&iter, 12091a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_TYPE_ARRAY, 12101a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_TYPE_STRING_AS_STRING, 12111a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J &array_iter)) 12121a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto oom; 1213b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 12141a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J link = _dbus_list_get_first_link (&base_names); 12151a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J while (link != NULL) 12161a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J { 12171a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J char *uname; 12181a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12191a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J _dbus_assert (link->data != NULL); 12201a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J uname = (char *)link->data; 1221b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1222b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering if (!dbus_message_iter_append_basic (&array_iter, 12231a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_TYPE_STRING, 12241a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J &uname)) 12251a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto oom; 12261a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12271a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J link = _dbus_list_get_next_link (&base_names, link); 12281a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J } 12291a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12301a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (! dbus_message_iter_close_container (&iter, &array_iter)) 12311a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto oom; 1232b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1233b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 12341a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (! bus_transaction_send_from_driver (transaction, connection, reply)) 12351a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J goto oom; 12361a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12371a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J dbus_message_unref (reply); 12381a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12391a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J return TRUE; 12401a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12411a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J oom: 12421a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J BUS_SET_OOM (error); 12431a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12441a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J failed: 12451a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J _DBUS_ASSERT_ERROR_IS_SET (error); 12461a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (reply) 12471a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J dbus_message_unref (reply); 12481a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12491a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J if (base_names) 12501a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J _dbus_list_clear (&base_names); 12511a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12521a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J return FALSE; 12531a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J} 12541a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J 12551a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (Jstatic dbus_bool_t 12562779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieubus_driver_handle_get_connection_unix_user (DBusConnection *connection, 12572779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusTransaction *transaction, 12582779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *message, 12592779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusError *error) 12602779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu{ 12619c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *service; 12622779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusString str; 12632779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusRegistry *registry; 12642779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusService *serv; 12652779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusConnection *conn; 12662779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *reply; 12672779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu unsigned long uid; 12689c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_uint32_t uid32; 12692779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12702779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_CLEAR (error); 12712779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12722779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu registry = bus_connection_get_registry (connection); 12732779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12742779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu service = NULL; 12752779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = NULL; 12762779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12772779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_get_args (message, error, 12782779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_STRING, &service, 12792779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 12802779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 12812779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12822779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_verbose ("asked for UID of connection %s\n", service); 12832779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12842779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_string_init_const (&str, service); 12852779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu serv = bus_registry_lookup (registry, &str); 12862779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (serv == NULL) 12872779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 1288b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering dbus_set_error (error, 12898873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington DBUS_ERROR_NAME_HAS_NO_OWNER, 12908873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "Could not get UID of name '%s': no such name", service); 12912779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 12922779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 12932779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12941a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J conn = bus_service_get_primary_owners_connection (serv); 12952779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 12962779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = dbus_message_new_method_return (message); 12972779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply == NULL) 12982779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 12992779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13002779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (!dbus_connection_get_unix_user (conn, &uid)) 13012779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 13022779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_set_error (error, 13032779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_ERROR_FAILED, 13042779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu "Could not determine UID for '%s'", service); 13052779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 13062779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 13072779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13089c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington uid32 = uid; 13092779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_append_args (reply, 13109c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_UINT32, &uid32, 13112779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 13122779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 13132779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13142779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 13152779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 13162779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13172779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 13182779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13192779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return TRUE; 13202779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13212779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu oom: 13222779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BUS_SET_OOM (error); 13232779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13242779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu failed: 13252779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 13262779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply) 13272779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 13282779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return FALSE; 13292779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu} 13302779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 13312779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieustatic dbus_bool_t 1332c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenbus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, 1333c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusTransaction *transaction, 1334c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *message, 1335c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusError *error) 1336c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen{ 13379c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *service; 1338c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusString str; 1339c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusRegistry *registry; 1340c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusService *serv; 1341c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusConnection *conn; 1342c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *reply; 1343c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen unsigned long pid; 13449c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_uint32_t pid32; 1345c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1346c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1347c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1348c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen registry = bus_connection_get_registry (connection); 1349c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1350c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen service = NULL; 1351c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = NULL; 1352c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1353c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_get_args (message, error, 1354c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_STRING, &service, 1355c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 1356c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 1357c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1358c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_verbose ("asked for PID of connection %s\n", service); 1359c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1360c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_string_init_const (&str, service); 1361c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen serv = bus_registry_lookup (registry, &str); 1362c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (serv == NULL) 1363c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 1364b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering dbus_set_error (error, 13658873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington DBUS_ERROR_NAME_HAS_NO_OWNER, 13668873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "Could not get PID of name '%s': no such name", service); 1367c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 1368c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 1369c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 13701a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J conn = bus_service_get_primary_owners_connection (serv); 1371c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1372c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = dbus_message_new_method_return (message); 1373c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply == NULL) 1374c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 1375c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1376c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (!dbus_connection_get_unix_process_id (conn, &pid)) 1377c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 1378c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_set_error (error, 1379c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN, 1380c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen "Could not determine PID for '%s'", service); 1381c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 1382c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 1383c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 13849c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington pid32 = pid; 1385c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_append_args (reply, 13869c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_UINT32, &pid32, 1387c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 1388c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 1389c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1390c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! bus_transaction_send_from_driver (transaction, connection, reply)) 1391c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 1392c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1393c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 1394c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1395c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return TRUE; 1396c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1397c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen oom: 1398c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BUS_SET_OOM (error); 1399c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1400c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen failed: 1401c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_SET (error); 1402c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply) 1403c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 1404c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return FALSE; 1405c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen} 1406c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1407c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenstatic dbus_bool_t 1408ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Waltersbus_driver_handle_get_adt_audit_session_data (DBusConnection *connection, 1409ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters BusTransaction *transaction, 1410ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBusMessage *message, 1411ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBusError *error) 1412ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters{ 1413ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters const char *service; 1414ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBusString str; 1415ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters BusRegistry *registry; 1416ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters BusService *serv; 1417ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBusConnection *conn; 1418ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBusMessage *reply; 14194e4f0de8cc8c3127641013fd833349dab34b676bColin Walters void *data = NULL; 1420ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters dbus_uint32_t data_size; 1421ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1422ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1423ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1424ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters registry = bus_connection_get_registry (connection); 1425ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1426ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters service = NULL; 1427ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters reply = NULL; 1428ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1429ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters if (! dbus_message_get_args (message, error, 1430ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_TYPE_STRING, &service, 1431ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_TYPE_INVALID)) 1432ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters goto failed; 1433ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1434ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters _dbus_verbose ("asked for audit session data for connection %s\n", service); 1435ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1436ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters _dbus_string_init_const (&str, service); 1437ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters serv = bus_registry_lookup (registry, &str); 1438ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters if (serv == NULL) 1439ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters { 1440b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering dbus_set_error (error, 1441ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_ERROR_NAME_HAS_NO_OWNER, 1442ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters "Could not get audit session data for name '%s': no such name", service); 1443ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters goto failed; 1444ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters } 1445ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1446ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters conn = bus_service_get_primary_owners_connection (serv); 1447ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1448ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters reply = dbus_message_new_method_return (message); 1449ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters if (reply == NULL) 1450ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters goto oom; 1451ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1452ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters if (!dbus_connection_get_adt_audit_session_data (conn, &data, &data_size) || data == NULL) 1453ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters { 1454ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters dbus_set_error (error, 1455ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN, 1456ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters "Could not determine audit session data for '%s'", service); 1457ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters goto failed; 1458ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters } 1459ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1460ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters if (! dbus_message_append_args (reply, 1461ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &data, data_size, 1462ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_TYPE_INVALID)) 1463ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters goto oom; 1464ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1465ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters if (! bus_transaction_send_from_driver (transaction, connection, reply)) 1466ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters goto oom; 1467ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1468ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters dbus_message_unref (reply); 1469ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1470ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters return TRUE; 1471ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1472ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters oom: 1473ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters BUS_SET_OOM (error); 1474ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1475ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters failed: 1476ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters _DBUS_ASSERT_ERROR_IS_SET (error); 1477ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters if (reply) 1478ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters dbus_message_unref (reply); 1479ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters return FALSE; 1480ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters} 1481ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters 1482ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Waltersstatic dbus_bool_t 14839a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Waltersbus_driver_handle_get_connection_selinux_security_context (DBusConnection *connection, 14849a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters BusTransaction *transaction, 14859a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters DBusMessage *message, 14869a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters DBusError *error) 14876c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters{ 14886c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters const char *service; 14896c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters DBusString str; 14906c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters BusRegistry *registry; 14916c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters BusService *serv; 14926c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters DBusConnection *conn; 14936c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters DBusMessage *reply; 14946c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters BusSELinuxID *context; 14956c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 14966c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters _DBUS_ASSERT_ERROR_IS_CLEAR (error); 14976c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 14986c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters registry = bus_connection_get_registry (connection); 14996c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15006c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters service = NULL; 15016c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters reply = NULL; 15026c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15036c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters if (! dbus_message_get_args (message, error, 15046c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters DBUS_TYPE_STRING, &service, 15056c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters DBUS_TYPE_INVALID)) 15066c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters goto failed; 15076c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15086c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters _dbus_verbose ("asked for security context of connection %s\n", service); 15096c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15106c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters _dbus_string_init_const (&str, service); 15116c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters serv = bus_registry_lookup (registry, &str); 15126c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters if (serv == NULL) 15136c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters { 1514b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering dbus_set_error (error, 15156c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters DBUS_ERROR_NAME_HAS_NO_OWNER, 15166c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters "Could not get security context of name '%s': no such name", service); 15176c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters goto failed; 15186c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters } 15196c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15201a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J conn = bus_service_get_primary_owners_connection (serv); 15216c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15226c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters reply = dbus_message_new_method_return (message); 15236c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters if (reply == NULL) 15246c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters goto oom; 15256c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15266c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters context = bus_connection_get_selinux_id (conn); 15276c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters if (!context) 15286c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters { 15296c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters dbus_set_error (error, 15309a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN, 15316c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters "Could not determine security context for '%s'", service); 15326c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters goto failed; 15336c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters } 15346c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15359a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters if (! bus_selinux_append_context (reply, context, error)) 15369a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters goto failed; 15376c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15386c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters if (! bus_transaction_send_from_driver (transaction, connection, reply)) 15396c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters goto oom; 15406c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15416c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters dbus_message_unref (reply); 15426c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15436c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters return TRUE; 15446c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15456c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters oom: 15466c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters BUS_SET_OOM (error); 15476c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15486c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters failed: 15496c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters _DBUS_ASSERT_ERROR_IS_SET (error); 15506c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters if (reply) 15516c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters dbus_message_unref (reply); 15526c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters return FALSE; 15536c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters} 15546c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters 15556c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Waltersstatic dbus_bool_t 15561919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergbus_driver_handle_reload_config (DBusConnection *connection, 15571919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusTransaction *transaction, 15581919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusMessage *message, 15591919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusError *error) 15601919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg{ 15611919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusContext *context; 156245ef0fbc4f0f5441425484be3662b2c44d2554b3John (J DBusMessage *reply; 15631919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 15641919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg _DBUS_ASSERT_ERROR_IS_CLEAR (error); 15651919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 156645ef0fbc4f0f5441425484be3662b2c44d2554b3John (J reply = NULL; 1567b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 15681919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg context = bus_connection_get_context (connection); 15691919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg if (!bus_context_reload_config (context, error)) 157045ef0fbc4f0f5441425484be3662b2c44d2554b3John (J goto failed; 15711919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 157245ef0fbc4f0f5441425484be3662b2c44d2554b3John (J reply = dbus_message_new_method_return (message); 157345ef0fbc4f0f5441425484be3662b2c44d2554b3John (J if (reply == NULL) 157445ef0fbc4f0f5441425484be3662b2c44d2554b3John (J goto oom; 157545ef0fbc4f0f5441425484be3662b2c44d2554b3John (J 157645ef0fbc4f0f5441425484be3662b2c44d2554b3John (J if (! bus_transaction_send_from_driver (transaction, connection, reply)) 157745ef0fbc4f0f5441425484be3662b2c44d2554b3John (J goto oom; 157845ef0fbc4f0f5441425484be3662b2c44d2554b3John (J 157945ef0fbc4f0f5441425484be3662b2c44d2554b3John (J dbus_message_unref (reply); 158045ef0fbc4f0f5441425484be3662b2c44d2554b3John (J return TRUE; 158145ef0fbc4f0f5441425484be3662b2c44d2554b3John (J 158245ef0fbc4f0f5441425484be3662b2c44d2554b3John (J oom: 158345ef0fbc4f0f5441425484be3662b2c44d2554b3John (J BUS_SET_OOM (error); 158445ef0fbc4f0f5441425484be3662b2c44d2554b3John (J 158545ef0fbc4f0f5441425484be3662b2c44d2554b3John (J failed: 158645ef0fbc4f0f5441425484be3662b2c44d2554b3John (J _DBUS_ASSERT_ERROR_IS_SET (error); 158745ef0fbc4f0f5441425484be3662b2c44d2554b3John (J if (reply) 158845ef0fbc4f0f5441425484be3662b2c44d2554b3John (J dbus_message_unref (reply); 158945ef0fbc4f0f5441425484be3662b2c44d2554b3John (J return FALSE; 15901919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg} 15911919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 159254b943432c7c947db88066751dd36a372cc9a618Havoc Penningtonstatic dbus_bool_t 159354b943432c7c947db88066751dd36a372cc9a618Havoc Penningtonbus_driver_handle_get_id (DBusConnection *connection, 159454b943432c7c947db88066751dd36a372cc9a618Havoc Pennington BusTransaction *transaction, 159554b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBusMessage *message, 159654b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBusError *error) 159754b943432c7c947db88066751dd36a372cc9a618Havoc Pennington{ 159854b943432c7c947db88066751dd36a372cc9a618Havoc Pennington BusContext *context; 159954b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBusMessage *reply; 160054b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBusString uuid; 160154b943432c7c947db88066751dd36a372cc9a618Havoc Pennington const char *v_STRING; 160254b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 160354b943432c7c947db88066751dd36a372cc9a618Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 160454b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 160554b943432c7c947db88066751dd36a372cc9a618Havoc Pennington if (!_dbus_string_init (&uuid)) 160654b943432c7c947db88066751dd36a372cc9a618Havoc Pennington { 160754b943432c7c947db88066751dd36a372cc9a618Havoc Pennington BUS_SET_OOM (error); 160854b943432c7c947db88066751dd36a372cc9a618Havoc Pennington return FALSE; 160954b943432c7c947db88066751dd36a372cc9a618Havoc Pennington } 161054b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 161154b943432c7c947db88066751dd36a372cc9a618Havoc Pennington reply = NULL; 1612b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 161354b943432c7c947db88066751dd36a372cc9a618Havoc Pennington context = bus_connection_get_context (connection); 161454b943432c7c947db88066751dd36a372cc9a618Havoc Pennington if (!bus_context_get_id (context, &uuid)) 161554b943432c7c947db88066751dd36a372cc9a618Havoc Pennington goto oom; 161654b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 161754b943432c7c947db88066751dd36a372cc9a618Havoc Pennington reply = dbus_message_new_method_return (message); 161854b943432c7c947db88066751dd36a372cc9a618Havoc Pennington if (reply == NULL) 161954b943432c7c947db88066751dd36a372cc9a618Havoc Pennington goto oom; 162054b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 162154b943432c7c947db88066751dd36a372cc9a618Havoc Pennington v_STRING = _dbus_string_get_const_data (&uuid); 162254b943432c7c947db88066751dd36a372cc9a618Havoc Pennington if (!dbus_message_append_args (reply, 162354b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBUS_TYPE_STRING, &v_STRING, 162454b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBUS_TYPE_INVALID)) 162554b943432c7c947db88066751dd36a372cc9a618Havoc Pennington goto oom; 1626b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 162754b943432c7c947db88066751dd36a372cc9a618Havoc Pennington _dbus_assert (dbus_message_has_signature (reply, "s")); 1628b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 162954b943432c7c947db88066751dd36a372cc9a618Havoc Pennington if (! bus_transaction_send_from_driver (transaction, connection, reply)) 163054b943432c7c947db88066751dd36a372cc9a618Havoc Pennington goto oom; 163154b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 1632b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering _dbus_string_free (&uuid); 163354b943432c7c947db88066751dd36a372cc9a618Havoc Pennington dbus_message_unref (reply); 163454b943432c7c947db88066751dd36a372cc9a618Havoc Pennington return TRUE; 163554b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 163654b943432c7c947db88066751dd36a372cc9a618Havoc Pennington oom: 163754b943432c7c947db88066751dd36a372cc9a618Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1638b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 163954b943432c7c947db88066751dd36a372cc9a618Havoc Pennington BUS_SET_OOM (error); 164054b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 164154b943432c7c947db88066751dd36a372cc9a618Havoc Pennington if (reply) 164254b943432c7c947db88066751dd36a372cc9a618Havoc Pennington dbus_message_unref (reply); 1643b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering _dbus_string_free (&uuid); 164454b943432c7c947db88066751dd36a372cc9a618Havoc Pennington return FALSE; 164554b943432c7c947db88066751dd36a372cc9a618Havoc Pennington} 164654b943432c7c947db88066751dd36a372cc9a618Havoc Pennington 164729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington/* For speed it might be useful to sort this in order of 164829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * frequency of use (but doesn't matter with only a few items 164929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * anyhow) 165029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 1651eb3b99e7c610988823804f5e6c92aa13459605c7Kjartan Maraasstatic struct 165229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington{ 165329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *name; 16545b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington const char *in_args; 16555b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington const char *out_args; 165629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t (* handler) (DBusConnection *connection, 165729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 165829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 165929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error); 166029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington} message_handlers[] = { 166154b943432c7c947db88066751dd36a372cc9a618Havoc Pennington { "Hello", 166254b943432c7c947db88066751dd36a372cc9a618Havoc Pennington "", 166354b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBUS_TYPE_STRING_AS_STRING, 1664b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering bus_driver_handle_hello }, 16655b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "RequestName", 16665b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING, 16675b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 16685b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_acquire_service }, 1669b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen { "ReleaseName", 1670b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBUS_TYPE_STRING_AS_STRING, 1671b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen DBUS_TYPE_UINT32_AS_STRING, 1672b5e4d26adec0a9ec37a1bae7aeb5a68344b78ebfRobert McQueen bus_driver_handle_release_service }, 16735b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "StartServiceByName", 16745b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING, 16755b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 16765b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_activate_service }, 167737853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode { "UpdateActivationEnvironment", 167837853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode DBUS_TYPE_ARRAY_AS_STRING DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, 167937853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode "", 168037853b6dd04fa32a6f948438d2fbdcd08bd473e4Ray Strode bus_driver_handle_update_activation_environment }, 16815b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "NameHasOwner", 16825b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 16835b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_BOOLEAN_AS_STRING, 16845b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_service_exists }, 16855b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "ListNames", 16865b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 16875b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, 16885b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_list_services }, 16897628b541258d906e27e2000a402ed2d02383479cJohn (J { "ListActivatableNames", 16907628b541258d906e27e2000a402ed2d02383479cJohn (J "", 16917628b541258d906e27e2000a402ed2d02383479cJohn (J DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, 16927628b541258d906e27e2000a402ed2d02383479cJohn (J bus_driver_handle_list_activatable_services }, 16935b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "AddMatch", 16945b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 16955b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 16965b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_add_match }, 16975b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "RemoveMatch", 16985b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 16995b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 17005b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_remove_match }, 17015b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "GetNameOwner", 17025b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 17035b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 17045b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_get_service_owner }, 17051a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J { "ListQueuedOwners", 17061a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_TYPE_STRING_AS_STRING, 17071a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, 17081a163e765c0d6a86d2aa2ffb18a1d7e29a052e7aJohn (J bus_driver_handle_list_queued_owners }, 17095b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "GetConnectionUnixUser", 17105b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 17115b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 17125b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_get_connection_unix_user }, 17135b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "GetConnectionUnixProcessID", 17145b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 17155b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 17165b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_get_connection_unix_process_id }, 1717ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters { "GetAdtAuditSessionData", 1718ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_TYPE_STRING_AS_STRING, 1719ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING, 1720ab1eb1fd5a26affa2383b0eb7e292efd83ec2546Colin Walters bus_driver_handle_get_adt_audit_session_data }, 17219a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters { "GetConnectionSELinuxSecurityContext", 17226c191520c8b33cd7e550a6e3d9d853c25f552f54Colin Walters DBUS_TYPE_STRING_AS_STRING, 17239a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING, 17249a94a1350bb93ea395812dd3c983e13e17c1bcb1Colin Walters bus_driver_handle_get_connection_selinux_security_context }, 17255b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "ReloadConfig", 17265b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 17275b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 172854b943432c7c947db88066751dd36a372cc9a618Havoc Pennington bus_driver_handle_reload_config }, 172954b943432c7c947db88066751dd36a372cc9a618Havoc Pennington { "GetId", 173054b943432c7c947db88066751dd36a372cc9a618Havoc Pennington "", 173154b943432c7c947db88066751dd36a372cc9a618Havoc Pennington DBUS_TYPE_STRING_AS_STRING, 173254b943432c7c947db88066751dd36a372cc9a618Havoc Pennington bus_driver_handle_get_id } 173329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington}; 173429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 173541f52c96d651003b3d0a266a582d401228a8368eHavoc Penningtonstatic dbus_bool_t 1736030cc1e53c6216853e08e27b92f72db80d001873Colin Walterswrite_args_for_direction (DBusString *xml, 1737030cc1e53c6216853e08e27b92f72db80d001873Colin Walters const char *signature, 1738030cc1e53c6216853e08e27b92f72db80d001873Colin Walters dbus_bool_t in) 1739030cc1e53c6216853e08e27b92f72db80d001873Colin Walters{ 1740030cc1e53c6216853e08e27b92f72db80d001873Colin Walters DBusTypeReader typereader; 1741030cc1e53c6216853e08e27b92f72db80d001873Colin Walters DBusString sigstr; 1742030cc1e53c6216853e08e27b92f72db80d001873Colin Walters int current_type; 1743b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1744030cc1e53c6216853e08e27b92f72db80d001873Colin Walters _dbus_string_init_const (&sigstr, signature); 1745030cc1e53c6216853e08e27b92f72db80d001873Colin Walters _dbus_type_reader_init_types_only (&typereader, &sigstr, 0); 1746b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1747030cc1e53c6216853e08e27b92f72db80d001873Colin Walters while ((current_type = _dbus_type_reader_get_current_type (&typereader)) != DBUS_TYPE_INVALID) 1748030cc1e53c6216853e08e27b92f72db80d001873Colin Walters { 1749030cc1e53c6216853e08e27b92f72db80d001873Colin Walters const DBusString *subsig; 1750030cc1e53c6216853e08e27b92f72db80d001873Colin Walters int start, len; 1751030cc1e53c6216853e08e27b92f72db80d001873Colin Walters 1752030cc1e53c6216853e08e27b92f72db80d001873Colin Walters _dbus_type_reader_get_signature (&typereader, &subsig, &start, &len); 17536180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters if (!_dbus_string_append_printf (xml, " <arg direction=\"%s\" type=\"", 17546180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters in ? "in" : "out")) 17556180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters goto oom; 17566180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters if (!_dbus_string_append_len (xml, 17576180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters _dbus_string_get_const_data (subsig) + start, 17586180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters len)) 17596180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters goto oom; 17606180ae6941aea083f5b8f3c4d3f16c928935bcafColin Walters if (!_dbus_string_append (xml, "\"/>\n")) 1761030cc1e53c6216853e08e27b92f72db80d001873Colin Walters goto oom; 1762030cc1e53c6216853e08e27b92f72db80d001873Colin Walters 1763030cc1e53c6216853e08e27b92f72db80d001873Colin Walters _dbus_type_reader_next (&typereader); 1764030cc1e53c6216853e08e27b92f72db80d001873Colin Walters } 1765030cc1e53c6216853e08e27b92f72db80d001873Colin Walters return TRUE; 1766030cc1e53c6216853e08e27b92f72db80d001873Colin Walters oom: 1767030cc1e53c6216853e08e27b92f72db80d001873Colin Walters return FALSE; 1768030cc1e53c6216853e08e27b92f72db80d001873Colin Walters} 1769030cc1e53c6216853e08e27b92f72db80d001873Colin Walters 177061316dd897846c6ee18daccdddaf8a78650a1406John (Jdbus_bool_t 177161316dd897846c6ee18daccdddaf8a78650a1406John (Jbus_driver_generate_introspect_string (DBusString *xml) 177241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington{ 177385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington int i; 177441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 177561316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE)) 177661316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 177761316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, "<node>\n")) 177861316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 177961316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_INTROSPECTABLE)) 178061316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 178161316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, " <method name=\"Introspect\">\n")) 178261316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 178361316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <arg name=\"data\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING)) 178461316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 178561316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, " </method>\n")) 178661316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 178761316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, " </interface>\n")) 178861316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 178985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 179061316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <interface name=\"%s\">\n", 1791248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_DBUS)) 179261316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 179385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 179485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington i = 0; 179585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington while (i < _DBUS_N_ELEMENTS (message_handlers)) 179685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 1797b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 179861316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <method name=\"%s\">\n", 179985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington message_handlers[i].name)) 180061316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 180185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 180261316dd897846c6ee18daccdddaf8a78650a1406John (J if (!write_args_for_direction (xml, message_handlers[i].in_args, TRUE)) 180361316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1804030cc1e53c6216853e08e27b92f72db80d001873Colin Walters 180561316dd897846c6ee18daccdddaf8a78650a1406John (J if (!write_args_for_direction (xml, message_handlers[i].out_args, FALSE)) 180661316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 180785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 180861316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, " </method>\n")) 180961316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1810b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 181185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington ++i; 181285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 181366e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 181461316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <signal name=\"NameOwnerChanged\">\n")) 181561316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1816b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 181761316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n")) 181861316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1819b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 182061316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n")) 182161316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1822b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 182361316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n")) 182461316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1825b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 182661316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " </signal>\n")) 182761316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 182866e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 182966e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 183066e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 183161316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <signal name=\"NameLost\">\n")) 183261316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1833b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 183461316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n")) 183561316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1836b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 183761316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " </signal>\n")) 183861316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 183966e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 184066e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 184166e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 184261316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <signal name=\"NameAcquired\">\n")) 184361316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1844b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 184561316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n")) 184661316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1847b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 184861316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append_printf (xml, " </signal>\n")) 184961316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 185066e1cb9e68ba37980f7a90c396950be1587cdcd7John (J 185161316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, " </interface>\n")) 185261316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 1853b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 185461316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_append (xml, "</node>\n")) 185561316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 185661316dd897846c6ee18daccdddaf8a78650a1406John (J 185761316dd897846c6ee18daccdddaf8a78650a1406John (J return TRUE; 185861316dd897846c6ee18daccdddaf8a78650a1406John (J} 185961316dd897846c6ee18daccdddaf8a78650a1406John (J 186061316dd897846c6ee18daccdddaf8a78650a1406John (Jstatic dbus_bool_t 186161316dd897846c6ee18daccdddaf8a78650a1406John (Jbus_driver_handle_introspect (DBusConnection *connection, 186261316dd897846c6ee18daccdddaf8a78650a1406John (J BusTransaction *transaction, 186361316dd897846c6ee18daccdddaf8a78650a1406John (J DBusMessage *message, 186461316dd897846c6ee18daccdddaf8a78650a1406John (J DBusError *error) 186561316dd897846c6ee18daccdddaf8a78650a1406John (J{ 186661316dd897846c6ee18daccdddaf8a78650a1406John (J DBusString xml; 186761316dd897846c6ee18daccdddaf8a78650a1406John (J DBusMessage *reply; 186861316dd897846c6ee18daccdddaf8a78650a1406John (J const char *v_STRING; 186961316dd897846c6ee18daccdddaf8a78650a1406John (J 187061316dd897846c6ee18daccdddaf8a78650a1406John (J _dbus_verbose ("Introspect() on bus driver\n"); 1871b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 187261316dd897846c6ee18daccdddaf8a78650a1406John (J _DBUS_ASSERT_ERROR_IS_CLEAR (error); 187361316dd897846c6ee18daccdddaf8a78650a1406John (J 187461316dd897846c6ee18daccdddaf8a78650a1406John (J reply = NULL; 187561316dd897846c6ee18daccdddaf8a78650a1406John (J 187661316dd897846c6ee18daccdddaf8a78650a1406John (J if (! dbus_message_get_args (message, error, 187761316dd897846c6ee18daccdddaf8a78650a1406John (J DBUS_TYPE_INVALID)) 187861316dd897846c6ee18daccdddaf8a78650a1406John (J { 187961316dd897846c6ee18daccdddaf8a78650a1406John (J _DBUS_ASSERT_ERROR_IS_SET (error); 188061316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 188161316dd897846c6ee18daccdddaf8a78650a1406John (J } 188261316dd897846c6ee18daccdddaf8a78650a1406John (J 188361316dd897846c6ee18daccdddaf8a78650a1406John (J if (!_dbus_string_init (&xml)) 188461316dd897846c6ee18daccdddaf8a78650a1406John (J { 188561316dd897846c6ee18daccdddaf8a78650a1406John (J BUS_SET_OOM (error); 188661316dd897846c6ee18daccdddaf8a78650a1406John (J return FALSE; 188761316dd897846c6ee18daccdddaf8a78650a1406John (J } 188861316dd897846c6ee18daccdddaf8a78650a1406John (J 188961316dd897846c6ee18daccdddaf8a78650a1406John (J if (!bus_driver_generate_introspect_string (&xml)) 189041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 189141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 189261316dd897846c6ee18daccdddaf8a78650a1406John (J v_STRING = _dbus_string_get_const_data (&xml); 189361316dd897846c6ee18daccdddaf8a78650a1406John (J 189441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington reply = dbus_message_new_method_return (message); 189541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (reply == NULL) 189641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 189741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 189841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (! dbus_message_append_args (reply, 189941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_TYPE_STRING, &v_STRING, 190041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_TYPE_INVALID)) 190141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 190241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 190341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (! bus_transaction_send_from_driver (transaction, connection, reply)) 190441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 190541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 190641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington dbus_message_unref (reply); 190741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_string_free (&xml); 190841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 190941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return TRUE; 191041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 191141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington oom: 191241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington BUS_SET_OOM (error); 191341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 191441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (reply) 191541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington dbus_message_unref (reply); 191641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 191741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_string_free (&xml); 1918b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 191941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return FALSE; 192041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington} 192141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 192229560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 192339dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlssonbus_driver_handle_message (DBusConnection *connection, 192429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 192529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 192629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 192739dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson{ 192841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington const char *name, *sender, *interface; 192929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington int i; 193090ed1d84588a84697051e643175452c50d682eceHavoc Pennington 193190ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 193268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 1933b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering if (dbus_message_is_signal (message, "org.freedesktop.systemd1.Activator", "ActivationFailure")) 1934b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering { 1935b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering BusContext *context; 1936b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1937b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering context = bus_connection_get_context (connection); 1938b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering return dbus_activation_systemd_failure(bus_context_get_activation(context), message); 1939b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering } 1940b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 194168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL) 194268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 194368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a non-method-call message, ignoring\n"); 194468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington return TRUE; /* we just ignore this */ 194568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 194668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 194741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (dbus_message_is_method_call (message, 1948248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_INTROSPECTABLE, 194941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington "Introspect")) 195041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return bus_driver_handle_introspect (connection, transaction, message, error); 1951b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 195241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington interface = dbus_message_get_interface (message); 195341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (interface == NULL) 1954248895207dc15914ac7970a6d1431308075dca1dColin Walters interface = DBUS_INTERFACE_DBUS; 1955b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 195668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (dbus_message_get_member (message) != NULL); 1957b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 195868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name = dbus_message_get_member (message); 195968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington sender = dbus_message_get_sender (message); 1960b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 196141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (strcmp (interface, 1962248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_DBUS) != 0) 196368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 196468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got message to unknown interface \"%s\"\n", 196541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington interface); 196668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington goto unknown; 196768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 1968b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 196968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a method call: %s\n", 197068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington dbus_message_get_member (message)); 1971b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 1972e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington /* security checks should have kept this from getting here */ 197368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (sender != NULL || strcmp (name, "Hello") == 0); 1974b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 197529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington i = 0; 197629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington while (i < _DBUS_N_ELEMENTS (message_handlers)) 197729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 197829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (strcmp (message_handlers[i].name, name) == 0) 197929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 19805b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _dbus_verbose ("Found driver handler for %s\n", name); 19815b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington 19825b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington if (!dbus_message_has_signature (message, message_handlers[i].in_args)) 19835b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { 19845b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 19855b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _dbus_verbose ("Call to %s has wrong args (%s, expected %s)\n", 19865b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington name, dbus_message_get_signature (message), 19875b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington message_handlers[i].in_args); 1988b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 19895b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington dbus_set_error (error, DBUS_ERROR_INVALID_ARGS, 19905b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "Call to %s has wrong args (%s, expected %s)\n", 19915b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington name, dbus_message_get_signature (message), 19925b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington message_handlers[i].in_args); 19935b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 19945b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington return FALSE; 19955b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington } 1996b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 199729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if ((* message_handlers[i].handler) (connection, transaction, message, error)) 1998eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 1999eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 2000eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler succeeded\n"); 2001eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return TRUE; 2002eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 200329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 2004eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 2005eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 2006eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler returned failure\n"); 2007eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return FALSE; 2008eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 200929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 2010b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 201129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington ++i; 201229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 201329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 201468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington unknown: 201568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("No driver handler for message \"%s\"\n", 201668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name); 2017eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington 20181d1b0f20a467cf1cbdcaf81fbad3a111bcff6c48Havoc Pennington dbus_set_error (error, DBUS_ERROR_UNKNOWN_METHOD, 201929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington "%s does not understand message %s", 2020248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_SERVICE_DBUS, name); 2021b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering 202229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 2023ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 2024ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 2025ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonvoid 2026ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_remove_connection (DBusConnection *connection) 2027ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 202888f69757b93c7112447b97868c7dbde69dc00caaJohn (J /* FIXME 1.0 Does nothing for now, should unregister the connection 202929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * with the bus driver. 203029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 203139dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson} 2032