|
@@ -0,0 +1,48 @@
+diff -ur a/src/polkitbackend/polkitbackendsessionmonitor-systemd.c b/src/polkitbackend/polkitbackendsessionmonitor-systemd.c
+--- a/src/polkitbackend/polkitbackendsessionmonitor-systemd.c 2015-06-19 22:31:02.000000000 +0200
++++ b/src/polkitbackend/polkitbackendsessionmonitor-systemd.c 2016-08-08 08:04:53.433647258 +0200
+@@ -298,6 +298,31 @@
+ return ret;
+ }
+
++static int
++fetch_seated_session(uid_t uid, char **session_id)
++{
++ int i = 0;
++ char **sessions = NULL;
++ char *seat = NULL;
++ int count = sd_uid_get_sessions (uid, &sessions);
++
++ for (i = 0; i < count; ++i) {
++ if (*session_id == NULL) {
++ if (sessions[i] != NULL) {
++ if (sd_session_get_seat (sessions[i], seat) >= 0) {
++ if (seat != NULL) {
++ *session_id = strdup(sessions[i]);
++ }
++ }
++ }
++ }
++ free(sessions[i]);
++ }
++ free(sessions);
++
++ return *session_id != NULL ? 0 : -1;
++}
++
+ /**
+ * polkit_backend_session_monitor_get_session_for_subject:
+ * @monitor: A #PolkitBackendSessionMonitor.
+@@ -362,6 +387,12 @@
+ goto out;
+ }
+ #endif
++ /* Now do process -> uid -> seated session if there is one (sailfish OS)*/
++ if (fetch_seated_session (uid, &session_id) >= 0)
++ {
++ session = polkit_unix_session_new (session_id);
++ goto out;
++ }
+
+ out:
+ free (session_id);
|