mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
dbus: don't try to run AddMatch when connected to a private bus
This commit is contained in:
parent
ad678a066b
commit
f4579ce704
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user