diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-08-22 18:48:03 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-08-24 19:48:26 +0200 |
commit | 73d3ac8e2440cda3b7f2310f329f0798de6c041c (patch) | |
tree | 2c0b703747602450361a5ded8916064f33a53364 /src/shared/bus-util.c | |
parent | sd-bus: add a variant of sd_bus_error_has_name() that takes multiple names (diff) | |
download | systemd-73d3ac8e2440cda3b7f2310f329f0798de6c041c.tar.xz systemd-73d3ac8e2440cda3b7f2310f329f0798de6c041c.zip |
various: treat BUS_ERROR_NO_SUCH_UNIT the same as SD_BUS_ERROR_SERVICE_UNKNOWN
We return BUS_ERROR_NO_SUCH_UNIT a.k.a. org.freedesktop.systemd1.NoSuchUnit
in various places. In #16813:
Aug 22 06:14:48 core sudo[2769199]: pam_systemd_home(sudo:account): Failed to query user record: Unit dbus-org.freedesktop.home1.service not found.
Aug 22 06:14:48 core dbus-daemon[5311]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.home1.service': Unit dbus-org.freedesktop.home1.service not found.
Aug 22 06:14:48 core dbus-daemon[5311]: [system] Activating via systemd: service name='org.freedesktop.home1' unit='dbus-org.freedesktop.home1.service' requested by ':1.6564' (uid=0 pid=2769199 comm="sudo su ")
This particular error comes from bus_unit_validate_load_state() in pid1:
case UNIT_NOT_FOUND:
return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s not found.", u->id);
It seems possible that we should return a different error, but it doesn't really
matter: if we change pid1 to return a different error, we still need to handle
BUS_ERROR_NO_SUCH_UNIT as in this patch to handle pid1 with current code.
Diffstat (limited to 'src/shared/bus-util.c')
-rw-r--r-- | src/shared/bus-util.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c index 77c1c62182..9a306daa03 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -14,14 +14,13 @@ #include "sd-event.h" #include "sd-id128.h" -/* #include "alloc-util.h" */ +#include "bus-common-errors.h" #include "bus-internal.h" #include "bus-label.h" #include "bus-util.h" #include "path-util.h" #include "socket-util.h" #include "stdio-util.h" -/* #include "string-util.h" */ static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) { sd_event *e = userdata; @@ -153,6 +152,13 @@ int bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error) { return has_owner; } +bool bus_error_is_unknown_service(const sd_bus_error *error) { + return sd_bus_error_has_names(error, + SD_BUS_ERROR_SERVICE_UNKNOWN, + SD_BUS_ERROR_NAME_HAS_NO_OWNER, + BUS_ERROR_NO_SUCH_UNIT); +} + int bus_check_peercred(sd_bus *c) { struct ucred ucred; int fd, r; |