X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flogin%2Flogind.c;h=4cd320d8c199d6768e37ba108970601825e08bf2;hp=5217e1a20e133387f1e4c9855620f7cab98eb80e;hb=caa7531f137aeb260fbda53e89a22f516836e89b;hpb=06ca7594edc2bf54a32f0fe86fc65976c70f1f11 diff --git a/src/login/logind.c b/src/login/logind.c index 5217e1a20..4cd320d8c 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -76,6 +76,23 @@ Manager *manager_new(void) { if (!m->kill_exclude_users) goto fail; + m->suspend_mode = NULL; + m->suspend_state = strv_new("mem", "standby", "freeze", NULL); + if (!m->suspend_state) + goto fail; + m->hibernate_mode = strv_new("platform", "shutdown", NULL); + if (!m->hibernate_mode) + goto fail; + m->hibernate_state = strv_new("disk", NULL); + if (!m->hibernate_state) + goto fail; + m->hybrid_sleep_mode = strv_new("suspend", "platform", "shutdown", NULL); + if (!m->hybrid_sleep_mode) + goto fail; + m->hybrid_sleep_state = strv_new("disk", NULL); + if (!m->hybrid_sleep_state) + goto fail; + m->udev = udev_new(); if (!m->udev) goto fail; @@ -86,6 +103,7 @@ Manager *manager_new(void) { sd_event_set_watchdog(m->event, true); + return m; fail: @@ -161,6 +179,13 @@ void manager_free(Manager *m) { strv_free(m->kill_only_users); strv_free(m->kill_exclude_users); + strv_free(m->suspend_mode); + strv_free(m->suspend_state); + strv_free(m->hibernate_mode); + strv_free(m->hibernate_state); + strv_free(m->hybrid_sleep_mode); + strv_free(m->hybrid_sleep_state); + free(m); } @@ -974,13 +999,25 @@ int manager_run(Manager *m) { } static int manager_parse_config_file(Manager *m) { + const char *unit, *logind_conf, *sections; + FILE *file; + bool relaxed, allow_include, warn; + assert(m); - return config_parse_many("/etc/systemd/logind.conf", - CONF_DIRS_NULSTR("systemd/logind.conf"), - "Login\0", - config_item_perf_lookup, logind_gperf_lookup, - false, m); + unit = NULL; + logind_conf = getenv("ELOGIND_CONF_FILE"); + if (!logind_conf) + logind_conf = PKGSYSCONFDIR "/logind.conf"; + sections = "Login\0Sleep\0"; + file = NULL; + relaxed = false; + allow_include = false; + warn = true; + + return config_parse(unit, logind_conf, file, sections, + config_item_perf_lookup, logind_gperf_lookup, + relaxed, allow_include, warn, m); } int main(int argc, char *argv[]) {