diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-12-23 21:28:22 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-12-23 21:28:48 +0100 |
commit | d04c1fb8e215600b4950c6778c6c16ddafc14024 (patch) | |
tree | 796dc9260b6f0419c747a5b115f7307751d354d2 /src/machine/machine-dbus.c | |
parent | 18d703816300790b041c4fd6991e3561aa2704cb (diff) |
machined: introduce polkit for OpenLogin() call
This way "machinectl login" can be opened up to run without privileges.
Diffstat (limited to 'src/machine/machine-dbus.c')
-rw-r--r-- | src/machine/machine-dbus.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c index 600d42f195..e63b7ad129 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -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 }; |