chiark / gitweb /
Prep v239: sync manager_get_user_by_pid() with upstream updates
[elogind.git] / src / login / logind-core.c
index 14b9eb35031b941d4a2cfc34175822547bf02b8e..eecf20e9e83808bd41ca88f61feafba2ac211458 100644 (file)
@@ -1,9 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
-/***
-  This file is part of systemd.
-
-  Copyright 2011 Lennart Poettering
-***/
 
 #include <fcntl.h>
 #include <pwd.h>
@@ -15,6 +10,7 @@
 #include "bus-error.h"
 #include "bus-util.h"
 #include "cgroup-util.h"
+//#include "conf-parser.h"
 #include "fd-util.h"
 #include "logind.h"
 #include "parse-util.h"
 #include "udev-util.h"
 #include "user-util.h"
 
+void manager_reset_config(Manager *m) {
+        assert(m);
+
+#if 0 /// elogind does not support autospawning of vts
+        m->n_autovts = 6;
+        m->reserve_vt = 6;
+#endif // 0
+        m->remove_ipc = true;
+        m->inhibit_delay_max = 5 * USEC_PER_SEC;
+        m->handle_power_key = HANDLE_POWEROFF;
+        m->handle_suspend_key = HANDLE_SUSPEND;
+        m->handle_hibernate_key = HANDLE_HIBERNATE;
+        m->handle_lid_switch = HANDLE_SUSPEND;
+        m->handle_lid_switch_ep = _HANDLE_ACTION_INVALID;
+        m->handle_lid_switch_docked = HANDLE_IGNORE;
+        m->power_key_ignore_inhibited = false;
+        m->suspend_key_ignore_inhibited = false;
+        m->hibernate_key_ignore_inhibited = false;
+        m->lid_switch_ignore_inhibited = true;
+
+        m->holdoff_timeout_usec = 30 * USEC_PER_SEC;
+
+        m->idle_action_usec = 30 * USEC_PER_MINUTE;
+        m->idle_action = HANDLE_IGNORE;
+
+        m->runtime_dir_size = physical_memory_scale(10U, 100U); /* 10% */
+        m->user_tasks_max = system_tasks_max_scale(DEFAULT_USER_TASKS_MAX_PERCENTAGE, 100U); /* 33% */
+        m->sessions_max = 8192;
+        m->inhibitors_max = 8192;
+
+        m->kill_user_processes = KILL_USER_PROCESSES;
+
+        m->kill_only_users = strv_free(m->kill_only_users);
+        m->kill_exclude_users = strv_free(m->kill_exclude_users);
+}
+
+int manager_parse_config_file(Manager *m) {
+        assert(m);
+
+        return config_parse_many_nulstr(PKGSYSCONFDIR "/logind.conf",
+                                        CONF_PATHS_NULSTR("elogind/logind.conf.d"),
+                                        "Login\0",
+                                        config_item_perf_lookup, logind_gperf_lookup,
+                                        CONFIG_PARSE_WARN, m);
+}
+
 int manager_add_device(Manager *m, const char *sysfs, bool master, Device **_device) {
         Device *d;
 
@@ -291,25 +333,28 @@ int manager_get_session_by_pid(Manager *m, pid_t pid, Session **ret) {
         s = hashmap_get(m->session_units, unit);
         if (!s)
                 goto not_found;
-
-        if (ret)
-                *ret = s;
 #else
         log_debug_elogind("Searching session for PID %u", pid);
         r = cg_pid_get_session(pid, &session_name);
         if (r < 0)
-                return 0;
+                goto not_found;
 
         s = hashmap_get(m->sessions, session_name);
         log_debug_elogind("Session Name \"%s\" -> Session \"%s\"",
                           session_name, s && s->id ? s->id : "NULL");
+        if (NULL == s)
+                goto not_found;
 #endif // 0
 
+        if (ret)
+                *ret = s;
+
         return 1;
 
 not_found:
         if (ret)
                 *ret = NULL;
+
         return 0;
 }
 
@@ -339,6 +384,15 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **ret) {
         if (ret)
                 *ret = u;
 
+#else
+        r = manager_get_session_by_pid (m, pid, &s);
+        if (r <= 0)
+                goto not_found;
+
+        if (ret)
+                *ret =  s->user;
+#endif // 0
+
         return 1;
 
 not_found:
@@ -346,15 +400,6 @@ not_found:
                 *ret = NULL;
 
         return 0;
-#else
-        r = manager_get_session_by_pid (m, pid, &s);
-        if (r <= 0)
-                return r;
-        if (ret)
-                *ret = u;
-
-        *user = s->user;
-#endif // 0
 }
 
 int manager_get_idle_hint(Manager *m, dual_timestamp *t) {