summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Nagy <robert@openbsd.org>2021-07-04 09:37:53 +0200
committerRobert Nagy <robert@openbsd.org>2021-07-04 09:37:53 +0200
commitf9d64a5128fc30a6cd65e0ffcc530d5255c1fa6c (patch)
tree5f22d35ebbc9d4f11e34d6dd60dc6e17714cc1b7 /src
parent2618521ef21071643283a2e28f7e8510f12fe9e9 (diff)
downloadConsoleKit2-f9d64a5128fc30a6cd65e0ffcc530d5255c1fa6c.tar.gz
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
Diffstat (limited to 'src')
-rw-r--r--src/ck-session-leader.c1
-rw-r--r--src/ck-session.c46
-rw-r--r--src/org.freedesktop.ConsoleKit.Session.xml21
3 files changed, 68 insertions, 0 deletions
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");
@@ -539,6 +544,23 @@ dbus_set_locked_hint (ConsoleKitSession *cksession,
}
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)
{
@@ -1369,6 +1391,20 @@ ck_session_set_login_session_id (CkSession *session,
}
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,
GError **error)
@@ -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 @@
<doc:seealso><doc:ref type="interface" to="Seat">org.freedesktop.ConsoleKit.Seat</doc:ref></doc:seealso>
</doc:doc>
</method>
+ <method name="GetSessionService">
+ <arg name="type" direction="out" type="s">
+ <doc:doc>
+ <doc:summary>Session service</doc:summary>
+ </doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>Returns the service of the provided session. Defaults to:</doc:para>
+ <doc:para>"unspecified" - Unknown session type, the default.</doc:para>
+ </doc:description>
+ <doc:seealso><doc:ref type="property" to="Session:session-service">session-service</doc:ref></doc:seealso>
+ </doc:doc>
+ </method>
<method name="GetSessionType">
<arg name="type" direction="out" type="s">
<doc:doc>
@@ -643,6 +657,13 @@
</doc:description>
</doc:doc>
</property>
+ <property name="session-service" type="s" access="read">
+ <doc:doc>
+ <doc:description>
+ <doc:para>The service of the session.</doc:para>
+ </doc:description>
+ </doc:doc>
+ </property>
<property name="session-type" type="s" access="read">
<doc:doc>
<doc:description>