]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
logind: allow taking control of devices only in some session types
authorLennart Poettering <lennart@poettering.net>
Thu, 11 Jan 2024 16:14:48 +0000 (17:14 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 11 Jan 2024 17:24:44 +0000 (18:24 +0100)
Let's restrict the logic a bit, so that "manage" session types are not
misused.

src/login/logind-session-dbus.c
src/login/logind-session.h

index d4e656ae85d031b7f3c64d6bfab7486b55c2776d..03a043fe7d82e14f03655263cd076aa930bd388b 100644 (file)
@@ -476,6 +476,9 @@ static int method_take_device(sd_bus_message *message, void *userdata, sd_bus_er
         if (!DEVICE_MAJOR_VALID(major) || !DEVICE_MINOR_VALID(minor))
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Device major/minor is not valid.");
 
+        if (!SESSION_CLASS_CAN_TAKE_DEVICE(s->class))
+                return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Session class doesn't support taking device control.");
+
         if (!session_is_controller(s, sd_bus_message_get_sender(message)))
                 return sd_bus_error_set(error, BUS_ERROR_NOT_IN_CONTROL, "You are not in control of this session");
 
index a7d90e997e525f86a9a02a5d42d1e89045d8e60e..5f3961cf61a0cb6ac8c2d9ede470d634f6fc7d7c 100644 (file)
@@ -57,6 +57,9 @@ typedef enum SessionClass {
 /* Which sessions classes should be subject to stop-in-idle */
 #define SESSION_CLASS_CAN_STOP_ON_IDLE(class) (IN_SET((class), SESSION_USER, SESSION_USER_EARLY))
 
+/* Which session classes can take control of devices */
+#define SESSION_CLASS_CAN_TAKE_DEVICE(class) (IN_SET((class), SESSION_USER, SESSION_USER_EARLY, SESSION_GREETER, SESSION_LOCK_SCREEN))
+
 typedef enum SessionType {
         SESSION_UNSPECIFIED,
         SESSION_TTY,