X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmachine%2Fmachine-dbus.c;h=cbdbc52a1490ac21949c6dcd810c4f842726e5a3;hb=003dffde2c1b93afbc9aff24b277276f65424406;hp=600d42f195f6004f527f7ef692df84c8107c3a55;hpb=5f8cc96a0301c1177b11dd2e89370ef0b2ef577b;p=elogind.git diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c index 600d42f19..cbdbc52a1 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -21,7 +21,6 @@ #include #include -#include #include #include "bus-util.h" @@ -35,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, @@ -431,6 +431,18 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us const char *p; int r; + r = bus_verify_polkit_async( + message, + CAP_SYS_ADMIN, + "org.freedesktop.machine1.login", + false, + &m->manager->polkit_registry, + error); + if (r < 0) + return r; + if (r == 0) + return 1; /* Will call us back */ + master = openpt_in_namespace(m->leader, O_RDWR|O_NOCTTY|O_CLOEXEC); if (master < 0) return master; @@ -512,6 +524,7 @@ const sd_bus_vtable machine_vtable[] = { SD_BUS_METHOD("GetAddresses", NULL, "a(iay)", bus_machine_method_get_addresses, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("GetOSRelease", NULL, "a{ss}", bus_machine_method_get_os_release, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("OpenPTY", NULL, "hs", bus_machine_method_open_pty, 0), + SD_BUS_METHOD("OpenLogin", NULL, "hs", bus_machine_method_open_login, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_VTABLE_END };