chiark / gitweb /
firstboot: follow lock protocol when changing /etc/shadow
[elogind.git] / src / core / manager.c
index 65e7b2604d2ae78d7fae06ea2af237f5e9111288..9d078c0af759161a1a44f55fdc589593cff99a8f 100644 (file)
@@ -429,7 +429,6 @@ int manager_new(SystemdRunningAs running_as, Manager **_m) {
         m->running_as = running_as;
         m->exit_code = _MANAGER_EXIT_CODE_INVALID;
         m->default_timer_accuracy_usec = USEC_PER_MINUTE;
-        m->default_cpu_quota_period_usec = 100 * USEC_PER_MSEC;
 
         m->idle_pipe[0] = m->idle_pipe[1] = m->idle_pipe[2] = m->idle_pipe[3] = -1;
 
@@ -2452,7 +2451,6 @@ void manager_check_finished(Manager *m) {
         usec_t firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec;
         Unit *u = NULL;
         Iterator i;
-        UnitActiveState state;
 
         assert(m);
 
@@ -2478,6 +2476,9 @@ void manager_check_finished(Manager *m) {
         /* Turn off confirm spawn now */
         m->confirm_spawn = false;
 
+        /* This is no longer the first boot */
+        m->is_first_boot = false;
+
         if (dual_timestamp_is_set(&m->finish_timestamp))
                 return;
 
@@ -2540,13 +2541,8 @@ void manager_check_finished(Manager *m) {
                                    NULL);
         }
 
-        SET_FOREACH(u, m->startup_units, i) {
-                u = set_steal_first(m->startup_units);
-                state = unit_active_state(u);
-                if (!UNIT_IS_ACTIVE_OR_ACTIVATING(state))
-                        continue;
-                cgroup_context_apply(m, unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path);
-        }
+        SET_FOREACH(u, m->startup_units, i)
+                cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m));
 
         bus_manager_send_finished(m, firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec);
 
@@ -2635,6 +2631,7 @@ void manager_run_generators(Manager *m) {
         _cleanup_closedir_ DIR *d = NULL;
         const char *generator_path;
         const char *argv[5];
+        const char *env[2];
         int r;
 
         assert(m);
@@ -2668,8 +2665,14 @@ void manager_run_generators(Manager *m) {
         argv[3] = m->generator_unit_path_late;
         argv[4] = NULL;
 
+        if (m->is_first_boot) {
+                env[0] = (char*) "SYSTEMD_FIRST_BOOT=1";
+                env[1] = NULL;
+        } else
+                env[0] = NULL;
+
         RUN_WITH_UMASK(0022)
-                execute_directory(generator_path, d, DEFAULT_TIMEOUT_USEC, (char**) argv);
+                execute_directory(generator_path, d, DEFAULT_TIMEOUT_USEC, (char**) argv, (char**) env);
 
 finish:
         trim_generator_dir(m, &m->generator_unit_path);