X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmachine%2Fmachine-dbus.c;h=b46f0a8dac8afc811fc7b6c1b5e0e0dd5ac9c75c;hb=0a6f50c0afdfc434b492493bd9efab20cbee8623;hp=31a6fc4715baa548f1715fb17c2fbb630517e52a;hpb=9bb0c7cfbb253c5b983efaed51a65bcbf422d8d7;p=elogind.git diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c index 31a6fc471..b46f0a8da 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -34,6 +34,7 @@ #include "path-util.h" #include "bus-internal.h" #include "machine.h" +#include "machine-dbus.h" static int property_get_id( sd_bus *bus, @@ -174,6 +175,9 @@ int bus_machine_method_get_addresses(sd_bus *bus, sd_bus_message *message, void assert(message); assert(m); + if (m->class != MACHINE_CONTAINER) + return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Requesting IP address data is only supported on container machines."); + r = readlink_malloc("/proc/self/ns/net", &us); if (r < 0) return sd_bus_error_set_errno(error, r); @@ -318,6 +322,9 @@ int bus_machine_method_get_os_release(sd_bus *bus, sd_bus_message *message, void assert(message); assert(m); + if (m->class != MACHINE_CONTAINER) + return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Requesting OS release data is only supported on container machines."); + r = namespace_open(m->leader, NULL, &mntns_fd, NULL, &root_fd); if (r < 0) return r; @@ -402,6 +409,9 @@ int bus_machine_method_open_pty(sd_bus *bus, sd_bus_message *message, void *user assert(message); assert(m); + if (m->class != MACHINE_CONTAINER) + return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Opening pseudo TTYs is only supported on container machines."); + master = openpt_in_namespace(m->leader, O_RDWR|O_NOCTTY|O_CLOEXEC); if (master < 0) return master; @@ -430,6 +440,9 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us const char *p; int r; + if (m->class != MACHINE_CONTAINER) + return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Opening logins is only supported on container machines."); + r = bus_verify_polkit_async( message, CAP_SYS_ADMIN, @@ -462,9 +475,9 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us return r; #ifdef ENABLE_KDBUS - asprintf(&container_bus->address, "x-container-kernel:pid=" PID_FMT ";x-container-unix:pid=" PID_FMT, m->leader, m->leader); + asprintf(&container_bus->address, "x-machine-kernel:pid=" PID_FMT ";x-machine-unix:pid=" PID_FMT, m->leader, m->leader); #else - asprintf(&container_bus->address, "x-container-kernel:pid=" PID_FMT, m->leader); + asprintf(&container_bus->address, "x-machine-kernel:pid=" PID_FMT, m->leader); #endif if (!container_bus->address) return -ENOMEM;