summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-07-07 03:43:39 +0200
committerLennart Poettering <lennart@poettering.net>2010-07-07 04:13:19 +0200
commitf4579ce704b9db0358b90c282da9536410a4df5a (patch)
tree84cf4c29623e56489d4bec194e92eefd1910d85f
parentad678a066b4ba5d8914dd7d5a4093572841205cf (diff)
downloadsystemd-f4579ce704b9db0358b90c282da9536410a4df5a.tar.gz
dbus: don't try to run AddMatch when connected to a private bus
-rw-r--r--src/dbus-common.c9
-rw-r--r--src/dbus-common.h2
-rw-r--r--src/install.c2
-rw-r--r--src/systemctl.c73
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) {