From f4ac61f5fe2632f30a7ef2125cbea1d281571bfc Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Thu, 10 Nov 2022 13:29:06 +0100 Subject: implement more sd_* shim functions --- libconsolekit/libconsolekit.h | 11 +++++++ libconsolekit/sd-compat.c | 77 +++++++++++++++++++++++++++++++++++++++++++ libconsolekit/sd-login.h | 5 +++ 3 files changed, 93 insertions(+) diff --git a/libconsolekit/libconsolekit.h b/libconsolekit/libconsolekit.h index c435215..b928872 100644 --- a/libconsolekit/libconsolekit.h +++ b/libconsolekit/libconsolekit.h @@ -126,6 +126,11 @@ gboolean lib_consolekit_session_get_remote_host (LibConsoleKit *ck, gchar **remote_host, GError **error); +gboolean lib_consolekit_session_get_service (LibConsoleKit *ck, + const gchar *session, + gchar **sercice, + GError **error); + gboolean lib_consolekit_session_get_tty (LibConsoleKit *ck, const gchar *session, gchar **tty, @@ -142,6 +147,12 @@ gboolean lib_consolekit_pid_get_session (LibConsoleKit *ck, GError **error); +gint +lib_consolekit_pid_get_sessions (LibConsoleKit *ck, + pid_t pid, + gchar **sessions, + GError **error); + gint lib_consolekit_uid_get_sessions (LibConsoleKit *ck, uid_t uid, diff --git a/libconsolekit/sd-compat.c b/libconsolekit/sd-compat.c index a5ed457..31cbb5d 100644 --- a/libconsolekit/sd-compat.c +++ b/libconsolekit/sd-compat.c @@ -120,6 +120,52 @@ sd_session_get_uid(const char *session, uid_t *uid) return 0; } +int +sd_session_get_service(const char *session, char **service) +{ + LibConsoleKit *ck = NULL; + GError *error = NULL; + + ck = lib_consolekit_new (); + + lib_consolekit_session_get_service (ck, session, service, &error); + if (error) { + g_warning ("Unable to determine session service: %s", + error ? error->message : ""); + g_error_free (error); + g_object_unref (ck); + return -ENXIO; + } + + g_object_unref (ck); + + return 0; +} + + +int +sd_pid_get_session(pid_t pid, char **session) +{ + LibConsoleKit *ck = NULL; + GError *error = NULL; + int ret = 0; + + ck = lib_consolekit_new (); + + ret = lib_consolekit_pid_get_session (ck, pid, session, &error); + if (error) { + g_warning ("Unable to determine list of session for pid: %s", + error ? error->message : ""); + g_error_free (error); + g_object_unref (ck); + return -ENXIO; + } + + g_object_unref (ck); + + return ret; +} + int sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions) { @@ -143,6 +189,13 @@ sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions) return ret; } +int +sd_seat_can_graphical(const char *seat) +{ + // XXX + return 1; +} + int sd_seat_can_multi_session(const char *seat) { @@ -166,6 +219,30 @@ sd_seat_can_multi_session(const char *seat) return can_activate; } +int +sd_seat_get_sessions(const char *seat, char ***sessions, + uid_t **uid, unsigned int *n_uids) +{ + LibConsoleKit *ck = NULL; + GError *error = NULL; + int num_sessions; + + ck = lib_consolekit_new (); + + num_sessions = lib_consolekit_seat_get_sessions (ck, seat, sessions, &error); + if (error) { + g_warning ("Unable to determine if seat can activate sessions: %s", + error ? error->message : ""); + g_error_free (error); + g_object_unref (ck); + return FALSE; + } + + g_object_unref (ck); + + return num_sessions; +} + int sd_get_sessions(char ***sessions) { diff --git a/libconsolekit/sd-login.h b/libconsolekit/sd-login.h index bbaca76..232598b 100644 --- a/libconsolekit/sd-login.h +++ b/libconsolekit/sd-login.h @@ -5,8 +5,13 @@ int sd_session_get_seat(const char *session, char **seat); int sd_session_get_type(const char *session, char **type); int sd_session_get_state(const char *session, char **state); int sd_session_get_uid(const char *session, uid_t *uid); + +int sd_pid_get_session(pid_t pid, char **session); + int sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions); +int sd_seat_can_graphical(const char *seat); int sd_seat_can_multi_session(const char *seat); +int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **uid, unsigned int *n_uids); int sd_get_sessions(char ***sessions); -- cgit v1.2.3