diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-07-07 03:43:39 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-07-07 04:13:19 +0200 |
commit | f4579ce704b9db0358b90c282da9536410a4df5a (patch) | |
tree | 84cf4c29623e56489d4bec194e92eefd1910d85f | |
parent | ad678a066b4ba5d8914dd7d5a4093572841205cf (diff) |
dbus: don't try to run AddMatch when connected to a private bus
-rw-r--r-- | src/dbus-common.c | 9 | ||||
-rw-r--r-- | src/dbus-common.h | 2 | ||||
-rw-r--r-- | src/install.c | 2 | ||||
-rw-r--r-- | src/systemctl.c | 73 |
4 files changed, 50 insertions, 36 deletions
diff --git a/src/dbus-common.c b/src/dbus-common.c index 504eefbbb0..11d989d7c3 100644 --- a/src/dbus-common.c +++ b/src/dbus-common.c @@ -54,7 +54,7 @@ int bus_check_peercred(DBusConnection *c) { return 1; } -int bus_connect(DBusBusType t, DBusConnection **_bus, DBusError *error) { +int bus_connect(DBusBusType t, DBusConnection **_bus, bool *private, DBusError *error) { DBusConnection *bus; assert(_bus); @@ -71,9 +71,16 @@ int bus_connect(DBusBusType t, DBusConnection **_bus, DBusError *error) { dbus_set_error_const(error, DBUS_ERROR_ACCESS_DENIED, "Failed to verify owner of bus."); return -EACCES; } + + if (private) + *private = true; + } else { if (!(bus = dbus_bus_get(t, error))) return -EIO; + + if (private) + *private = false; } dbus_connection_set_exit_on_disconnect(bus, FALSE); diff --git a/src/dbus-common.h b/src/dbus-common.h index f355de14f8..b28755fc79 100644 --- a/src/dbus-common.h +++ b/src/dbus-common.h @@ -26,6 +26,6 @@ int bus_check_peercred(DBusConnection *c); -int bus_connect(DBusBusType t, DBusConnection **_bus, DBusError *error); +int bus_connect(DBusBusType t, DBusConnection **_bus, bool *private_bus, DBusError *error); #endif diff --git a/src/install.c b/src/install.c index 3bf5761b3d..3b70bd1d3d 100644 --- a/src/install.c +++ b/src/install.c @@ -791,7 +791,7 @@ static int do_run(void) { return 0; } - if ((r = bus_connect(arg_where == WHERE_SESSION ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &bus, &error)) < 0) { + if ((r = bus_connect(arg_where == WHERE_SESSION ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &bus, NULL, &error)) < 0) { log_error("Failed to get D-Bus connection: %s", error.message); goto finish; } diff --git a/src/systemctl.c b/src/systemctl.c index 5c91c325cd..081f34bcfd 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -75,6 +75,8 @@ enum action { _ACTION_MAX } arg_action = ACTION_SYSTEMCTL; +static bool private_bus = false; + static bool error_is_no_service(DBusError *error) { assert(error); @@ -561,6 +563,9 @@ static int enable_wait_for_jobs(DBusConnection *bus) { assert(bus); + if (private_bus) + return 0; + dbus_error_init(&error); dbus_bus_add_match(bus, "type='signal'," @@ -1849,43 +1854,45 @@ static int monitor(DBusConnection *bus, char **args, unsigned n) { dbus_error_init(&error); - dbus_bus_add_match(bus, - "type='signal'," - "sender='org.freedesktop.systemd1'," - "interface='org.freedesktop.systemd1.Manager'," - "path='/org/freedesktop/systemd1'", - &error); + if (!private_bus) { + dbus_bus_add_match(bus, + "type='signal'," + "sender='org.freedesktop.systemd1'," + "interface='org.freedesktop.systemd1.Manager'," + "path='/org/freedesktop/systemd1'", + &error); - if (dbus_error_is_set(&error)) { - log_error("Failed to add match: %s", error.message); - r = -EIO; - goto finish; - } + if (dbus_error_is_set(&error)) { + log_error("Failed to add match: %s", error.message); + r = -EIO; + goto finish; + } - dbus_bus_add_match(bus, - "type='signal'," - "sender='org.freedesktop.systemd1'," - "interface='org.freedesktop.systemd1.Unit'," - "member='Changed'", - &error); + dbus_bus_add_match(bus, + "type='signal'," + "sender='org.freedesktop.systemd1'," + "interface='org.freedesktop.systemd1.Unit'," + "member='Changed'", + &error); - if (dbus_error_is_set(&error)) { - log_error("Failed to add match: %s", error.message); - r = -EIO; - goto finish; - } + if (dbus_error_is_set(&error)) { + log_error("Failed to add match: %s", error.message); + r = -EIO; + goto finish; + } - dbus_bus_add_match(bus, - "type='signal'," - "sender='org.freedesktop.systemd1'," - "interface='org.freedesktop.systemd1.Job'," - "member='Changed'", - &error); + dbus_bus_add_match(bus, + "type='signal'," + "sender='org.freedesktop.systemd1'," + "interface='org.freedesktop.systemd1.Job'," + "member='Changed'", + &error); - if (dbus_error_is_set(&error)) { - log_error("Failed to add match: %s", error.message); - r = -EIO; - goto finish; + if (dbus_error_is_set(&error)) { + log_error("Failed to add match: %s", error.message); + r = -EIO; + goto finish; + } } if (!dbus_connection_add_filter(bus, monitor_filter, NULL, NULL)) { @@ -3286,7 +3293,7 @@ int main(int argc, char*argv[]) { goto finish; } - bus_connect(arg_session ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &bus, &error); + bus_connect(arg_session ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &bus, &private_bus, &error); switch (arg_action) { |