From f9d64a5128fc30a6cd65e0ffcc530d5255c1fa6c Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 4 Jul 2021 09:37:53 +0200 Subject: add a session-service parameter mainly to be used by gdm this commit also adds GetSessionService so that the session service can be queried over dbus --- src/ck-session-leader.c | 1 + src/ck-session.c | 46 ++++++++++++++++++++++++++++++ src/org.freedesktop.ConsoleKit.Session.xml | 21 ++++++++++++++ 3 files changed, 68 insertions(+) (limited to 'src') diff --git a/src/ck-session-leader.c b/src/ck-session-leader.c index bc46147..96c93b5 100644 --- a/src/ck-session-leader.c +++ b/src/ck-session-leader.c @@ -51,6 +51,7 @@ static struct { { "remote-host-name", "s", G_TYPE_STRING }, { "session-type", "s", G_TYPE_STRING }, { "session-class", "s", G_TYPE_STRING }, + { "session-service", "s", G_TYPE_STRING }, { "is-local", "b", G_TYPE_BOOLEAN }, { "unix-user", "i", G_TYPE_INT }, { "user", "i", G_TYPE_INT }, diff --git a/src/ck-session.c b/src/ck-session.c index 8a35044..14a09a1 100644 --- a/src/ck-session.c +++ b/src/ck-session.c @@ -261,6 +261,11 @@ register_session (CkSession *session, GDBusConnection *connection) console_kit_session_set_session_type (CONSOLE_KIT_SESSION (session), "unspecified"); } + /* default to unspecified for the session service on startup */ + if (console_kit_session_get_session_service (CONSOLE_KIT_SESSION (session)) == NULL) { + console_kit_session_set_session_service (CONSOLE_KIT_SESSION (session), "unspecified"); + } + /* default to user for the session class on startup */ if (console_kit_session_get_session_class (CONSOLE_KIT_SESSION (session)) == NULL) { console_kit_session_set_session_class (CONSOLE_KIT_SESSION (session), "user"); @@ -538,6 +543,23 @@ dbus_set_locked_hint (ConsoleKitSession *cksession, return TRUE; } +static gboolean +dbus_get_session_service (ConsoleKitSession *cksession, + GDBusMethodInvocation *context) +{ + const gchar *session_service = console_kit_session_get_session_service (cksession); + + TRACE (); + + if (session_service == NULL) { + /* default to unspecified */ + session_service = "unspecified"; + } + + console_kit_session_complete_get_session_service (cksession, context, session_service); + return TRUE; +} + static gboolean dbus_get_session_type (ConsoleKitSession *cksession, GDBusMethodInvocation *context) @@ -1368,6 +1390,20 @@ ck_session_set_login_session_id (CkSession *session, return TRUE; } +gboolean +ck_session_set_session_service (CkSession *session, + const char *service, + GError **error) +{ + ConsoleKitSession *cksession = CONSOLE_KIT_SESSION (session); + + g_return_val_if_fail (CK_IS_SESSION (session), FALSE); + + console_kit_session_set_session_service (cksession, service); + + return TRUE; +} + gboolean ck_session_set_session_type (CkSession *session, const char *type, @@ -2080,6 +2116,7 @@ ck_session_iface_init (ConsoleKitSessionIface *iface) iface->handle_get_seat_id = dbus_get_seat_id; iface->handle_get_login_session_id = dbus_get_login_session_id; iface->handle_get_vtnr = dbus_get_vtnr; + iface->handle_get_session_service = dbus_get_session_service; iface->handle_get_session_type = dbus_get_session_type; iface->handle_get_session_class = dbus_get_session_class; iface->handle_get_session_state = dbus_get_session_state; @@ -2294,6 +2331,9 @@ ck_session_run_programs (CkSession *session, cksession = CONSOLE_KIT_SESSION (session); extra_env[n++] = g_strdup_printf ("CK_SESSION_ID=%s", session->priv->id); + if (console_kit_session_get_session_service (cksession) != NULL) { + extra_env[n++] = g_strdup_printf ("CK_SESSION_SERVICE=%s", console_kit_session_get_session_service (cksession)); + } if (console_kit_session_get_session_type (cksession) != NULL) { extra_env[n++] = g_strdup_printf ("CK_SESSION_TYPE=%s", console_kit_session_get_session_type (cksession)); } @@ -2342,6 +2382,12 @@ ck_session_dump (CkSession *session, group_name, "seat", NONULL_STRING (session->priv->seat_id)); + if (console_kit_session_get_session_service (cksession) != NULL) { + g_key_file_set_string (key_file, + group_name, + "service", + NONULL_STRING (console_kit_session_get_session_service (cksession))); + } if (console_kit_session_get_session_type (cksession) != NULL) { g_key_file_set_string (key_file, group_name, diff --git a/src/org.freedesktop.ConsoleKit.Session.xml b/src/org.freedesktop.ConsoleKit.Session.xml index 97ceb64..20fd204 100644 --- a/src/org.freedesktop.ConsoleKit.Session.xml +++ b/src/org.freedesktop.ConsoleKit.Session.xml @@ -37,6 +37,20 @@ org.freedesktop.ConsoleKit.Seat + + + + Session service + + + + + Returns the service of the provided session. Defaults to: + "unspecified" - Unknown session type, the default. + + session-service + + @@ -643,6 +657,13 @@ + + + + The service of the session. + + + -- cgit v1.2.3