chiark / gitweb /
Add --enable-debug=elogind configure option and fix cgroup path
[elogind.git] / src / login / logind-core.c
index e8da59a18252861127bd548b0d152588ddea5919..f8b2d4355aa3714bd4a9f528e72338d9e5b94030 100644 (file)
@@ -31,6 +31,7 @@
 #include "bus-error.h"
 #include "udev-util.h"
 #include "logind.h"
+#include "terminal-util.h"
 
 int manager_add_device(Manager *m, const char *sysfs, bool master, Device **_device) {
         Device *d;
@@ -182,44 +183,6 @@ int manager_add_button(Manager *m, const char *name, Button **_button) {
         return 0;
 }
 
-int manager_watch_busname(Manager *m, const char *name) {
-        char *n;
-        int r;
-
-        assert(m);
-        assert(name);
-
-        if (set_get(m->busnames, (char*) name))
-                return 0;
-
-        n = strdup(name);
-        if (!n)
-                return -ENOMEM;
-
-        r = set_put(m->busnames, n);
-        if (r < 0) {
-                free(n);
-                return r;
-        }
-
-        return 0;
-}
-
-void manager_drop_busname(Manager *m, const char *name) {
-        Session *session;
-        Iterator i;
-
-        assert(m);
-        assert(name);
-
-        /* keep it if the name still owns a controller */
-        HASHMAP_FOREACH(session, m->sessions, i)
-                if (session_is_controller(session, name))
-                        return;
-
-        free(set_remove(m->busnames, (char*) name));
-}
-
 int manager_process_seat_device(Manager *m, struct udev_device *d) {
         Device *device;
         int r;
@@ -311,31 +274,53 @@ int manager_process_button_device(Manager *m, struct udev_device *d) {
 }
 
 int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) {
+/// elogind does not support systemd units, but its own session system
+#if 0
         _cleanup_free_ char *unit = NULL;
+#else
+        _cleanup_free_ char *session_name = NULL;
+#endif
         Session *s;
         int r;
 
         assert(m);
-        assert(session);
 
         if (pid < 1)
                 return -EINVAL;
 
+/// elogind does not support systemd units, but its own session system
+#if 0
         r = cg_pid_get_unit(pid, &unit);
         if (r < 0)
                 return 0;
 
         s = hashmap_get(m->session_units, unit);
+#else
+        log_debug_elogind("Searching session for PID %u", pid);
+        r = cg_pid_get_session(pid, &session_name);
+        if (r < 0)
+                return 0;
+
+        s = hashmap_get(m->sessions, session_name);
+        log_debug_elogind("Session Name \"%s\" -> Session \"%s\"",
+                          session_name, s && s->id ? s->id : "NULL");
+#endif
         if (!s)
                 return 0;
 
-        *session = s;
+        if (session)
+                *session = s;
         return 1;
 }
 
 int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) {
+/// elogind does not support systemd units, but its own session system
+#if 0
         _cleanup_free_ char *unit = NULL;
         User *u;
+#else
+        Session *s;
+#endif
         int r;
 
         assert(m);
@@ -344,6 +329,8 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) {
         if (pid < 1)
                 return -EINVAL;
 
+/// elogind does not support systemd units, but its own session system
+#if 0
         r = cg_pid_get_slice(pid, &unit);
         if (r < 0)
                 return 0;
@@ -353,6 +340,14 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) {
                 return 0;
 
         *user = u;
+#else
+        r = manager_get_session_by_pid (m, pid, &s);
+        if (r <= 0)
+                return r;
+
+        *user = s->user;
+#endif // 0
+
         return 1;
 }
 
@@ -411,6 +406,8 @@ bool manager_shall_kill(Manager *m, const char *user) {
         return strv_contains(m->kill_only_users, user);
 }
 
+/// UNNEEDED by elogind
+#if 0
 static int vt_is_busy(unsigned int vtnr) {
         struct vt_stat vt_stat;
         int r = 0;
@@ -475,6 +472,7 @@ int manager_spawn_autovt(Manager *m, unsigned int vtnr) {
 
         return r;
 }
+#endif // 0
 
 bool manager_is_docked(Manager *m) {
         Iterator i;