X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind.c;h=586d92fcaf0b1f630fcb16a4a0f2bdfd34ca9433;hb=faf2e887be42215c1999950d16d1975e70bbdfe9;hp=755d0be21a87384712c3226b2fe7256d98cbafb8;hpb=1dcc35973e70aa02beb37fcc9d289053c264eef1;p=elogind.git diff --git a/src/login/logind.c b/src/login/logind.c index 755d0be21..586d92fca 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -35,6 +35,7 @@ #include "formats-util.h" #include "label.h" #include "label.h" +#include "cgroup.h" static void manager_free(Manager *m); @@ -46,6 +47,8 @@ static Manager *manager_new(void) { if (!m) return NULL; + m->pin_cgroupfs_fd = -1; + m->console_active_fd = -1; m->reserve_vt_fd = -1; @@ -77,6 +80,9 @@ static Manager *manager_new(void) { m->user_units = hashmap_new(&string_hash_ops); m->session_units = hashmap_new(&string_hash_ops); + m->running_as = MANAGER_SYSTEM; + m->test_run = false; + if (!m->devices || !m->seats || !m->sessions || !m->users || !m->inhibitors || !m->buttons || !m->user_units || !m->session_units) goto fail; @@ -84,6 +90,11 @@ static Manager *manager_new(void) { if (!m->kill_exclude_users) goto fail; + /* Make cgroups */ + r = manager_setup_cgroup(m); + if (r < 0) + goto fail; + m->udev = udev_new(); if (!m->udev) goto fail; @@ -171,6 +182,8 @@ static void manager_free(Manager *m) { safe_close(m->reserve_vt_fd); + manager_shutdown_cgroup(m, true); + strv_free(m->kill_only_users); strv_free(m->kill_exclude_users); @@ -1130,9 +1143,21 @@ int main(int argc, char *argv[]) { * existence of /run/systemd/seats/ to determine whether * logind is available, so please always make sure this check * stays in. */ - mkdir_label("/run/systemd/seats", 0755); - mkdir_label("/run/systemd/users", 0755); - mkdir_label("/run/systemd/sessions", 0755); + r = mkdir_label("/run/systemd", 0755); + if ( (r < 0) && (-EEXIST != r) ) + return log_error_errno(r, "Failed to create /run/systemd : %m"); + r = mkdir_label("/run/systemd/seats", 0755); + if ( r < 0 && (-EEXIST != r) ) + return log_error_errno(r, "Failed to create /run/systemd/seats : %m"); + r = mkdir_label("/run/systemd/users", 0755); + if ( r < 0 && (-EEXIST != r) ) + return log_error_errno(r, "Failed to create /run/systemd/users : %m"); + r = mkdir_label("/run/systemd/sessions", 0755); + if ( r < 0 && (-EEXIST != r) ) + return log_error_errno(r, "Failed to create /run/systemd/sessions : %m"); + r = mkdir_label("/run/systemd/machines", 0755); + if ( r < 0 && (-EEXIST != r) ) + return log_error_errno(r, "Failed to create /run/systemd/machines : %m"); m = manager_new(); if (!m) {