From 68fbd9a09c2c85e2d6223fb92b2fd4b545601706 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 11 Jan 2024 17:20:38 +0100 Subject: [PATCH] logind: also restrict on which session classes one cange the session type --- src/login/logind-session-dbus.c | 3 +++ src/login/logind-session.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c index 03a043fe7d8..7217b814764 100644 --- a/src/login/logind-session-dbus.c +++ b/src/login/logind-session-dbus.c @@ -393,6 +393,9 @@ static int method_set_type(sd_bus_message *message, void *userdata, sd_bus_error return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid session type '%s'", t); + if (!SESSION_CLASS_CAN_CHANGE_TYPE(s->class)) + return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Session class doesn't support changing type."); + if (!session_is_controller(s, sd_bus_message_get_sender(message))) return sd_bus_error_set(error, BUS_ERROR_NOT_IN_CONTROL, "You must be in control of this session to set type"); diff --git a/src/login/logind-session.h b/src/login/logind-session.h index 5f3961cf61a..6a0fb543035 100644 --- a/src/login/logind-session.h +++ b/src/login/logind-session.h @@ -60,6 +60,9 @@ typedef enum SessionClass { /* 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)) +/* Which session classes allow changing session types */ +#define SESSION_CLASS_CAN_CHANGE_TYPE(class) (IN_SET((class), SESSION_USER, SESSION_USER_EARLY, SESSION_GREETER, SESSION_LOCK_SCREEN)) + typedef enum SessionType { SESSION_UNSPECIFIED, SESSION_TTY, -- 2.47.3