X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbus-driverd%2Fbus-driverd.c;h=0fff698e9507424a3b50bc707073e0642d1baa13;hb=aa56560dbbd485e61fb527214a5211d4b683b3e8;hp=46ee3492bade04611a22666a4e1b427410d3ecc3;hpb=37224a5ff522a366b353e8a01e2c2eee1e5416e5;p=elogind.git diff --git a/src/bus-driverd/bus-driverd.c b/src/bus-driverd/bus-driverd.c index 46ee3492b..0fff698e9 100644 --- a/src/bus-driverd/bus-driverd.c +++ b/src/bus-driverd/bus-driverd.c @@ -377,6 +377,8 @@ static int driver_get_security_ctx(sd_bus *bus, sd_bus_message *m, void *userdat assert_return(service_name_is_valid(arg0), -EINVAL); r = sd_bus_get_owner(bus, arg0, SD_BUS_CREDS_SELINUX_CONTEXT, &creds); + if (r == -ENOENT) + return sd_bus_error_setf(error, SD_BUS_ERROR_NAME_HAS_NO_OWNER, "Name %s is currently not owned by anyone.", arg0); if (r < 0) return r; @@ -403,6 +405,8 @@ static int driver_get_pid(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus assert_return(service_name_is_valid(arg0), -EINVAL); r = sd_bus_get_owner(bus, arg0, SD_BUS_CREDS_PID, &creds); + if (r == -ENOENT) + return sd_bus_error_setf(error, SD_BUS_ERROR_NAME_HAS_NO_OWNER, "Name %s is currently not owned by anyone.", arg0); if (r < 0) return r; @@ -421,6 +425,8 @@ static int driver_get_user(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bu assert_return(service_name_is_valid(arg0), -EINVAL); r = sd_bus_get_owner(bus, arg0, SD_BUS_CREDS_UID, &creds); + if (r == -ENOENT) + return sd_bus_error_setf(error, SD_BUS_ERROR_NAME_HAS_NO_OWNER, "Name %s is currently not owned by anyone.", arg0); if (r < 0) return r; @@ -451,6 +457,8 @@ static int driver_get_name_owner(sd_bus *bus, sd_bus_message *m, void *userdata, assert_return(service_name_is_valid(arg0), -EINVAL); r = sd_bus_get_owner(bus, arg0, SD_BUS_CREDS_UNIQUE_NAME, &creds); + if (r == -ENOENT) + return sd_bus_error_setf(error, SD_BUS_ERROR_NAME_HAS_NO_OWNER, "Name %s is currently not owned by anyone.", arg0); if (r < 0) return r; @@ -484,6 +492,9 @@ static int driver_list_names(sd_bus *bus, sd_bus_message *m, void *userdata, sd_ if (r < 0) return r; + /* Let's sort the names list to make it stable */ + strv_sort(names); + return return_strv(bus, m, names); } @@ -495,6 +506,9 @@ static int driver_list_activatable_names(sd_bus *bus, sd_bus_message *m, void *u if (r < 0) return r; + /* Let's sort the names list to make it stable */ + strv_sort(names); + return return_strv(bus, m, names); } @@ -712,7 +726,7 @@ static int driver_unsupported(sd_bus *bus, sd_bus_message *m, void *userdata, sd static const sd_bus_vtable driver_vtable[] = { SD_BUS_VTABLE_START(0), - SD_BUS_METHOD("AddMatch", "s", NULL, driver_add_match, 0), + SD_BUS_METHOD("AddMatch", "s", NULL, driver_add_match, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("GetConnectionSELinuxSecurityContext", "s", "ay", driver_get_security_ctx, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("GetConnectionUnixProcessID", "s", "u", driver_get_pid, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("GetConnectionUnixUser", "s", "u", driver_get_user, SD_BUS_VTABLE_UNPRIVILEGED),