chiark / gitweb /
treewide: another round of simplifications
[elogind.git] / src / core / main.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4   This file is part of systemd.
5
6   Copyright 2010 Lennart Poettering
7
8   systemd is free software; you can redistribute it and/or modify it
9   under the terms of the GNU Lesser General Public License as published by
10   the Free Software Foundation; either version 2.1 of the License, or
11   (at your option) any later version.
12
13   systemd is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16   Lesser General Public License for more details.
17
18   You should have received a copy of the GNU Lesser General Public License
19   along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 #include <stdio.h>
23 #include <errno.h>
24 #include <string.h>
25 #include <unistd.h>
26 #include <sys/types.h>
27 #include <sys/stat.h>
28 #include <getopt.h>
29 #include <signal.h>
30 #include <sys/wait.h>
31 #include <fcntl.h>
32 #include <sys/prctl.h>
33 #include <sys/mount.h>
34
35 #ifdef HAVE_VALGRIND_VALGRIND_H
36 #include <valgrind/valgrind.h>
37 #endif
38 #ifdef HAVE_SECCOMP
39 #include <seccomp.h>
40 #endif
41
42 #include "sd-daemon.h"
43 #include "sd-messages.h"
44 #include "sd-bus.h"
45 #include "manager.h"
46 #include "log.h"
47 #include "load-fragment.h"
48 #include "fdset.h"
49 #include "special.h"
50 #include "conf-parser.h"
51 #include "missing.h"
52 #include "label.h"
53 #include "pager.h"
54 #include "build.h"
55 #include "strv.h"
56 #include "def.h"
57 #include "virt.h"
58 #include "architecture.h"
59 #include "watchdog.h"
60 #include "path-util.h"
61 #include "switch-root.h"
62 #include "capability.h"
63 #include "killall.h"
64 #include "env-util.h"
65 #include "clock-util.h"
66 #include "fileio.h"
67 #include "dbus-manager.h"
68 #include "bus-error.h"
69 #include "bus-util.h"
70
71 #include "mount-setup.h"
72 #include "loopback-setup.h"
73 #include "hostname-setup.h"
74 #include "machine-id-setup.h"
75 #include "selinux-setup.h"
76 #include "ima-setup.h"
77 #include "smack-setup.h"
78 #include "kmod-setup.h"
79
80 static enum {
81         ACTION_RUN,
82         ACTION_HELP,
83         ACTION_VERSION,
84         ACTION_TEST,
85         ACTION_DUMP_CONFIGURATION_ITEMS,
86         ACTION_DONE
87 } arg_action = ACTION_RUN;
88 static char *arg_default_unit = NULL;
89 static SystemdRunningAs arg_running_as = _SYSTEMD_RUNNING_AS_INVALID;
90 static bool arg_dump_core = true;
91 static bool arg_crash_shell = false;
92 static int arg_crash_chvt = -1;
93 static bool arg_confirm_spawn = false;
94 static ShowStatus arg_show_status = _SHOW_STATUS_UNSET;
95 static bool arg_switched_root = false;
96 static int arg_no_pager = -1;
97 static char ***arg_join_controllers = NULL;
98 static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL;
99 static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
100 static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC;
101 static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
102 static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
103 static usec_t arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL;
104 static unsigned arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST;
105 static usec_t arg_runtime_watchdog = 0;
106 static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
107 static char **arg_default_environment = NULL;
108 static struct rlimit *arg_default_rlimit[_RLIMIT_MAX] = {};
109 static uint64_t arg_capability_bounding_set_drop = 0;
110 static nsec_t arg_timer_slack_nsec = NSEC_INFINITY;
111 static usec_t arg_default_timer_accuracy_usec = 1 * USEC_PER_MINUTE;
112 static Set* arg_syscall_archs = NULL;
113 static FILE* arg_serialization = NULL;
114 static bool arg_default_cpu_accounting = false;
115 static bool arg_default_blockio_accounting = false;
116 static bool arg_default_memory_accounting = false;
117
118 static void nop_handler(int sig) {}
119
120 static void pager_open_if_enabled(void) {
121
122         if (arg_no_pager <= 0)
123                 return;
124
125         pager_open(false);
126 }
127
128 noreturn static void crash(int sig) {
129
130         if (getpid() != 1)
131                 /* Pass this on immediately, if this is not PID 1 */
132                 raise(sig);
133         else if (!arg_dump_core)
134                 log_emergency("Caught <%s>, not dumping core.", signal_to_string(sig));
135         else {
136                 struct sigaction sa = {
137                         .sa_handler = nop_handler,
138                         .sa_flags = SA_NOCLDSTOP|SA_RESTART,
139                 };
140                 pid_t pid;
141
142                 /* We want to wait for the core process, hence let's enable SIGCHLD */
143                 sigaction(SIGCHLD, &sa, NULL);
144
145                 pid = fork();
146                 if (pid < 0)
147                         log_emergency_errno(errno, "Caught <%s>, cannot fork for core dump: %m", signal_to_string(sig));
148
149                 else if (pid == 0) {
150                         struct rlimit rl = {};
151
152                         /* Enable default signal handler for core dump */
153                         zero(sa);
154                         sa.sa_handler = SIG_DFL;
155                         sigaction(sig, &sa, NULL);
156
157                         /* Don't limit the core dump size */
158                         rl.rlim_cur = RLIM_INFINITY;
159                         rl.rlim_max = RLIM_INFINITY;
160                         setrlimit(RLIMIT_CORE, &rl);
161
162                         /* Just to be sure... */
163                         chdir("/");
164
165                         /* Raise the signal again */
166                         raise(sig);
167
168                         assert_not_reached("We shouldn't be here...");
169                         _exit(1);
170
171                 } else {
172                         siginfo_t status;
173                         int r;
174
175                         /* Order things nicely. */
176                         r = wait_for_terminate(pid, &status);
177                         if (r < 0)
178                                 log_emergency_errno(r, "Caught <%s>, waitpid() failed: %m", signal_to_string(sig));
179                         else if (status.si_code != CLD_DUMPED)
180                                 log_emergency("Caught <%s>, core dump failed.", signal_to_string(sig));
181                         else
182                                 log_emergency("Caught <%s>, dumped core as pid "PID_FMT".", signal_to_string(sig), pid);
183                 }
184         }
185
186         if (arg_crash_chvt)
187                 chvt(arg_crash_chvt);
188
189         if (arg_crash_shell) {
190                 struct sigaction sa = {
191                         .sa_handler = SIG_IGN,
192                         .sa_flags = SA_NOCLDSTOP|SA_NOCLDWAIT|SA_RESTART,
193                 };
194                 pid_t pid;
195
196                 log_info("Executing crash shell in 10s...");
197                 sleep(10);
198
199                 /* Let the kernel reap children for us */
200                 assert_se(sigaction(SIGCHLD, &sa, NULL) == 0);
201
202                 pid = fork();
203                 if (pid < 0)
204                         log_emergency_errno(errno, "Failed to fork off crash shell: %m");
205                 else if (pid == 0) {
206                         make_console_stdio();
207                         execl("/bin/sh", "/bin/sh", NULL);
208
209                         log_emergency_errno(errno, "execl() failed: %m");
210                         _exit(1);
211                 }
212
213                 log_info("Successfully spawned crash shell as pid "PID_FMT".", pid);
214         }
215
216         log_emergency("Freezing execution.");
217         freeze();
218 }
219
220 static void install_crash_handler(void) {
221         struct sigaction sa = {
222                 .sa_handler = crash,
223                 .sa_flags = SA_NODEFER,
224         };
225
226         sigaction_many(&sa, SIGNALS_CRASH_HANDLER, -1);
227 }
228
229 static int console_setup(void) {
230         _cleanup_close_ int tty_fd = -1;
231         int r;
232
233         tty_fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
234         if (tty_fd < 0)
235                 return log_error_errno(tty_fd, "Failed to open /dev/console: %m");
236
237         /* We don't want to force text mode.  plymouth may be showing
238          * pictures already from initrd. */
239         r = reset_terminal_fd(tty_fd, false);
240         if (r < 0)
241                 return log_error_errno(r, "Failed to reset /dev/console: %m");
242
243         return 0;
244 }
245
246 static int set_default_unit(const char *u) {
247         char *c;
248
249         assert(u);
250
251         c = strdup(u);
252         if (!c)
253                 return -ENOMEM;
254
255         free(arg_default_unit);
256         arg_default_unit = c;
257
258         return 0;
259 }
260
261 static int parse_proc_cmdline_item(const char *key, const char *value) {
262
263         static const char * const rlmap[] = {
264                 "emergency", SPECIAL_EMERGENCY_TARGET,
265                 "-b",        SPECIAL_EMERGENCY_TARGET,
266                 "rescue",    SPECIAL_RESCUE_TARGET,
267                 "single",    SPECIAL_RESCUE_TARGET,
268                 "-s",        SPECIAL_RESCUE_TARGET,
269                 "s",         SPECIAL_RESCUE_TARGET,
270                 "S",         SPECIAL_RESCUE_TARGET,
271                 "1",         SPECIAL_RESCUE_TARGET,
272                 "2",         SPECIAL_RUNLEVEL2_TARGET,
273                 "3",         SPECIAL_RUNLEVEL3_TARGET,
274                 "4",         SPECIAL_RUNLEVEL4_TARGET,
275                 "5",         SPECIAL_RUNLEVEL5_TARGET,
276         };
277         int r;
278
279         assert(key);
280
281         if (streq(key, "systemd.unit") && value) {
282
283                 if (!in_initrd())
284                         return set_default_unit(value);
285
286         } else if (streq(key, "rd.systemd.unit") && value) {
287
288                 if (in_initrd())
289                         return set_default_unit(value);
290
291         } else if (streq(key, "systemd.dump_core") && value) {
292
293                 r = parse_boolean(value);
294                 if (r < 0)
295                         log_warning("Failed to parse dump core switch %s. Ignoring.", value);
296                 else
297                         arg_dump_core = r;
298
299         } else if (streq(key, "systemd.crash_shell") && value) {
300
301                 r = parse_boolean(value);
302                 if (r < 0)
303                         log_warning("Failed to parse crash shell switch %s. Ignoring.", value);
304                 else
305                         arg_crash_shell = r;
306
307         } else if (streq(key, "systemd.crash_chvt") && value) {
308
309                 if (safe_atoi(value, &r) < 0)
310                         log_warning("Failed to parse crash chvt switch %s. Ignoring.", value);
311                 else
312                         arg_crash_chvt = r;
313
314         } else if (streq(key, "systemd.confirm_spawn") && value) {
315
316                 r = parse_boolean(value);
317                 if (r < 0)
318                         log_warning("Failed to parse confirm spawn switch %s. Ignoring.", value);
319                 else
320                         arg_confirm_spawn = r;
321
322         } else if (streq(key, "systemd.show_status") && value) {
323
324                 r = parse_show_status(value, &arg_show_status);
325                 if (r < 0)
326                         log_warning("Failed to parse show status switch %s. Ignoring.", value);
327
328         } else if (streq(key, "systemd.default_standard_output") && value) {
329
330                 r = exec_output_from_string(value);
331                 if (r < 0)
332                         log_warning("Failed to parse default standard output switch %s. Ignoring.", value);
333                 else
334                         arg_default_std_output = r;
335
336         } else if (streq(key, "systemd.default_standard_error") && value) {
337
338                 r = exec_output_from_string(value);
339                 if (r < 0)
340                         log_warning("Failed to parse default standard error switch %s. Ignoring.", value);
341                 else
342                         arg_default_std_error = r;
343
344         } else if (streq(key, "systemd.setenv") && value) {
345
346                 if (env_assignment_is_valid(value)) {
347                         char **env;
348
349                         env = strv_env_set(arg_default_environment, value);
350                         if (env)
351                                 arg_default_environment = env;
352                         else
353                                 log_warning_errno(ENOMEM, "Setting environment variable '%s' failed, ignoring: %m", value);
354                 } else
355                         log_warning("Environment variable name '%s' is not valid. Ignoring.", value);
356
357         } else if (streq(key, "quiet") && !value) {
358
359                 log_set_max_level(LOG_NOTICE);
360
361                 if (arg_show_status == _SHOW_STATUS_UNSET)
362                         arg_show_status = SHOW_STATUS_AUTO;
363
364         } else if (streq(key, "debug") && !value) {
365
366                 /* Note that log_parse_environment() handles 'debug'
367                  * too, and sets the log level to LOG_DEBUG. */
368
369                 if (detect_container(NULL) > 0)
370                         log_set_target(LOG_TARGET_CONSOLE);
371
372         } else if (!in_initrd() && !value) {
373                 unsigned i;
374
375                 /* SysV compatibility */
376                 for (i = 0; i < ELEMENTSOF(rlmap); i += 2)
377                         if (streq(key, rlmap[i]))
378                                 return set_default_unit(rlmap[i+1]);
379         }
380
381         return 0;
382 }
383
384 #define DEFINE_SETTER(name, func, descr)                              \
385         static int name(const char *unit,                             \
386                         const char *filename,                         \
387                         unsigned line,                                \
388                         const char *section,                          \
389                         unsigned section_line,                        \
390                         const char *lvalue,                           \
391                         int ltype,                                    \
392                         const char *rvalue,                           \
393                         void *data,                                   \
394                         void *userdata) {                             \
395                                                                       \
396                 int r;                                                \
397                                                                       \
398                 assert(filename);                                     \
399                 assert(lvalue);                                       \
400                 assert(rvalue);                                       \
401                                                                       \
402                 r = func(rvalue);                                     \
403                 if (r < 0)                                            \
404                         log_syntax(unit, LOG_ERR, filename, line, -r, \
405                                    "Invalid " descr "'%s': %s",       \
406                                    rvalue, strerror(-r));             \
407                                                                       \
408                 return 0;                                             \
409         }
410
411 DEFINE_SETTER(config_parse_level2, log_set_max_level_from_string, "log level")
412 DEFINE_SETTER(config_parse_target, log_set_target_from_string, "target")
413 DEFINE_SETTER(config_parse_color, log_show_color_from_string, "color" )
414 DEFINE_SETTER(config_parse_location, log_show_location_from_string, "location")
415
416 static int config_parse_cpu_affinity2(
417                 const char *unit,
418                 const char *filename,
419                 unsigned line,
420                 const char *section,
421                 unsigned section_line,
422                 const char *lvalue,
423                 int ltype,
424                 const char *rvalue,
425                 void *data,
426                 void *userdata) {
427
428         const char *word, *state;
429         size_t l;
430         cpu_set_t *c = NULL;
431         unsigned ncpus = 0;
432
433         assert(filename);
434         assert(lvalue);
435         assert(rvalue);
436
437         FOREACH_WORD_QUOTED(word, l, rvalue, state) {
438                 char *t;
439                 int r;
440                 unsigned cpu;
441
442                 if (!(t = strndup(word, l)))
443                         return log_oom();
444
445                 r = safe_atou(t, &cpu);
446                 free(t);
447
448                 if (!c)
449                         if (!(c = cpu_set_malloc(&ncpus)))
450                                 return log_oom();
451
452                 if (r < 0 || cpu >= ncpus) {
453                         log_syntax(unit, LOG_ERR, filename, line, -r,
454                                    "Failed to parse CPU affinity '%s'", rvalue);
455                         CPU_FREE(c);
456                         return -EBADMSG;
457                 }
458
459                 CPU_SET_S(cpu, CPU_ALLOC_SIZE(ncpus), c);
460         }
461         if (!isempty(state))
462                 log_syntax(unit, LOG_ERR, filename, line, EINVAL,
463                            "Trailing garbage, ignoring.");
464
465         if (c) {
466                 if (sched_setaffinity(0, CPU_ALLOC_SIZE(ncpus), c) < 0)
467                         log_unit_warning(unit, "Failed to set CPU affinity: %m");
468
469                 CPU_FREE(c);
470         }
471
472         return 0;
473 }
474
475 static int config_parse_show_status(
476                 const char* unit,
477                 const char *filename,
478                 unsigned line,
479                 const char *section,
480                 unsigned section_line,
481                 const char *lvalue,
482                 int ltype,
483                 const char *rvalue,
484                 void *data,
485                 void *userdata) {
486
487         int k;
488         ShowStatus *b = data;
489
490         assert(filename);
491         assert(lvalue);
492         assert(rvalue);
493         assert(data);
494
495         k = parse_show_status(rvalue, b);
496         if (k < 0) {
497                 log_syntax(unit, LOG_ERR, filename, line, -k,
498                            "Failed to parse show status setting, ignoring: %s", rvalue);
499                 return 0;
500         }
501
502         return 0;
503 }
504
505 static void strv_free_free(char ***l) {
506         char ***i;
507
508         if (!l)
509                 return;
510
511         for (i = l; *i; i++)
512                 strv_free(*i);
513
514         free(l);
515 }
516
517 static void free_join_controllers(void) {
518         strv_free_free(arg_join_controllers);
519         arg_join_controllers = NULL;
520 }
521
522 static int config_parse_join_controllers(const char *unit,
523                                          const char *filename,
524                                          unsigned line,
525                                          const char *section,
526                                          unsigned section_line,
527                                          const char *lvalue,
528                                          int ltype,
529                                          const char *rvalue,
530                                          void *data,
531                                          void *userdata) {
532
533         unsigned n = 0;
534         const char *word, *state;
535         size_t length;
536
537         assert(filename);
538         assert(lvalue);
539         assert(rvalue);
540
541         free_join_controllers();
542
543         FOREACH_WORD_QUOTED(word, length, rvalue, state) {
544                 char *s, **l;
545
546                 s = strndup(word, length);
547                 if (!s)
548                         return log_oom();
549
550                 l = strv_split(s, ",");
551                 free(s);
552
553                 strv_uniq(l);
554
555                 if (strv_length(l) <= 1) {
556                         strv_free(l);
557                         continue;
558                 }
559
560                 if (!arg_join_controllers) {
561                         arg_join_controllers = new(char**, 2);
562                         if (!arg_join_controllers) {
563                                 strv_free(l);
564                                 return log_oom();
565                         }
566
567                         arg_join_controllers[0] = l;
568                         arg_join_controllers[1] = NULL;
569
570                         n = 1;
571                 } else {
572                         char ***a;
573                         char ***t;
574
575                         t = new0(char**, n+2);
576                         if (!t) {
577                                 strv_free(l);
578                                 return log_oom();
579                         }
580
581                         n = 0;
582
583                         for (a = arg_join_controllers; *a; a++) {
584
585                                 if (strv_overlap(*a, l)) {
586                                         if (strv_extend_strv(&l, *a) < 0) {
587                                                 strv_free(l);
588                                                 strv_free_free(t);
589                                                 return log_oom();
590                                         }
591
592                                 } else {
593                                         char **c;
594
595                                         c = strv_copy(*a);
596                                         if (!c) {
597                                                 strv_free(l);
598                                                 strv_free_free(t);
599                                                 return log_oom();
600                                         }
601
602                                         t[n++] = c;
603                                 }
604                         }
605
606                         t[n++] = strv_uniq(l);
607
608                         strv_free_free(arg_join_controllers);
609                         arg_join_controllers = t;
610                 }
611         }
612         if (!isempty(state))
613                 log_syntax(unit, LOG_ERR, filename, line, EINVAL,
614                            "Trailing garbage, ignoring.");
615
616         return 0;
617 }
618
619 static int parse_config_file(void) {
620
621         const ConfigTableItem items[] = {
622                 { "Manager", "LogLevel",                  config_parse_level2,           0, NULL                                   },
623                 { "Manager", "LogTarget",                 config_parse_target,           0, NULL                                   },
624                 { "Manager", "LogColor",                  config_parse_color,            0, NULL                                   },
625                 { "Manager", "LogLocation",               config_parse_location,         0, NULL                                   },
626                 { "Manager", "DumpCore",                  config_parse_bool,             0, &arg_dump_core                         },
627                 { "Manager", "CrashShell",                config_parse_bool,             0, &arg_crash_shell                       },
628                 { "Manager", "ShowStatus",                config_parse_show_status,      0, &arg_show_status                       },
629                 { "Manager", "CrashChVT",                 config_parse_int,              0, &arg_crash_chvt                        },
630                 { "Manager", "CPUAffinity",               config_parse_cpu_affinity2,    0, NULL                                   },
631                 { "Manager", "JoinControllers",           config_parse_join_controllers, 0, &arg_join_controllers                  },
632                 { "Manager", "RuntimeWatchdogSec",        config_parse_sec,              0, &arg_runtime_watchdog                  },
633                 { "Manager", "ShutdownWatchdogSec",       config_parse_sec,              0, &arg_shutdown_watchdog                 },
634                 { "Manager", "CapabilityBoundingSet",     config_parse_bounding_set,     0, &arg_capability_bounding_set_drop      },
635 #ifdef HAVE_SECCOMP
636                 { "Manager", "SystemCallArchitectures",   config_parse_syscall_archs,    0, &arg_syscall_archs                     },
637 #endif
638                 { "Manager", "TimerSlackNSec",            config_parse_nsec,             0, &arg_timer_slack_nsec                  },
639                 { "Manager", "DefaultTimerAccuracySec",   config_parse_sec,              0, &arg_default_timer_accuracy_usec       },
640                 { "Manager", "DefaultStandardOutput",     config_parse_output,           0, &arg_default_std_output                },
641                 { "Manager", "DefaultStandardError",      config_parse_output,           0, &arg_default_std_error                 },
642                 { "Manager", "DefaultTimeoutStartSec",    config_parse_sec,              0, &arg_default_timeout_start_usec        },
643                 { "Manager", "DefaultTimeoutStopSec",     config_parse_sec,              0, &arg_default_timeout_stop_usec         },
644                 { "Manager", "DefaultRestartSec",         config_parse_sec,              0, &arg_default_restart_usec              },
645                 { "Manager", "DefaultStartLimitInterval", config_parse_sec,              0, &arg_default_start_limit_interval      },
646                 { "Manager", "DefaultStartLimitBurst",    config_parse_unsigned,         0, &arg_default_start_limit_burst         },
647                 { "Manager", "DefaultEnvironment",        config_parse_environ,          0, &arg_default_environment               },
648                 { "Manager", "DefaultLimitCPU",           config_parse_limit,            0, &arg_default_rlimit[RLIMIT_CPU]        },
649                 { "Manager", "DefaultLimitFSIZE",         config_parse_limit,            0, &arg_default_rlimit[RLIMIT_FSIZE]      },
650                 { "Manager", "DefaultLimitDATA",          config_parse_limit,            0, &arg_default_rlimit[RLIMIT_DATA]       },
651                 { "Manager", "DefaultLimitSTACK",         config_parse_limit,            0, &arg_default_rlimit[RLIMIT_STACK]      },
652                 { "Manager", "DefaultLimitCORE",          config_parse_limit,            0, &arg_default_rlimit[RLIMIT_CORE]       },
653                 { "Manager", "DefaultLimitRSS",           config_parse_limit,            0, &arg_default_rlimit[RLIMIT_RSS]        },
654                 { "Manager", "DefaultLimitNOFILE",        config_parse_limit,            0, &arg_default_rlimit[RLIMIT_NOFILE]     },
655                 { "Manager", "DefaultLimitAS",            config_parse_limit,            0, &arg_default_rlimit[RLIMIT_AS]         },
656                 { "Manager", "DefaultLimitNPROC",         config_parse_limit,            0, &arg_default_rlimit[RLIMIT_NPROC]      },
657                 { "Manager", "DefaultLimitMEMLOCK",       config_parse_limit,            0, &arg_default_rlimit[RLIMIT_MEMLOCK]    },
658                 { "Manager", "DefaultLimitLOCKS",         config_parse_limit,            0, &arg_default_rlimit[RLIMIT_LOCKS]      },
659                 { "Manager", "DefaultLimitSIGPENDING",    config_parse_limit,            0, &arg_default_rlimit[RLIMIT_SIGPENDING] },
660                 { "Manager", "DefaultLimitMSGQUEUE",      config_parse_limit,            0, &arg_default_rlimit[RLIMIT_MSGQUEUE]   },
661                 { "Manager", "DefaultLimitNICE",          config_parse_limit,            0, &arg_default_rlimit[RLIMIT_NICE]       },
662                 { "Manager", "DefaultLimitRTPRIO",        config_parse_limit,            0, &arg_default_rlimit[RLIMIT_RTPRIO]     },
663                 { "Manager", "DefaultLimitRTTIME",        config_parse_limit,            0, &arg_default_rlimit[RLIMIT_RTTIME]     },
664                 { "Manager", "DefaultCPUAccounting",      config_parse_bool,             0, &arg_default_cpu_accounting            },
665                 { "Manager", "DefaultBlockIOAccounting",  config_parse_bool,             0, &arg_default_blockio_accounting        },
666                 { "Manager", "DefaultMemoryAccounting",   config_parse_bool,             0, &arg_default_memory_accounting         },
667                 {}
668         };
669
670         const char *fn;
671
672         fn = arg_running_as == SYSTEMD_SYSTEM ? PKGSYSCONFDIR "/system.conf" : PKGSYSCONFDIR "/user.conf";
673         config_parse(NULL, fn, NULL,
674                      "Manager\0",
675                      config_item_table_lookup, items,
676                      false, false, true, NULL);
677
678         return 0;
679 }
680
681 static int parse_argv(int argc, char *argv[]) {
682
683         enum {
684                 ARG_LOG_LEVEL = 0x100,
685                 ARG_LOG_TARGET,
686                 ARG_LOG_COLOR,
687                 ARG_LOG_LOCATION,
688                 ARG_UNIT,
689                 ARG_SYSTEM,
690                 ARG_USER,
691                 ARG_TEST,
692                 ARG_NO_PAGER,
693                 ARG_VERSION,
694                 ARG_DUMP_CONFIGURATION_ITEMS,
695                 ARG_DUMP_CORE,
696                 ARG_CRASH_SHELL,
697                 ARG_CONFIRM_SPAWN,
698                 ARG_SHOW_STATUS,
699                 ARG_DESERIALIZE,
700                 ARG_SWITCHED_ROOT,
701                 ARG_DEFAULT_STD_OUTPUT,
702                 ARG_DEFAULT_STD_ERROR
703         };
704
705         static const struct option options[] = {
706                 { "log-level",                required_argument, NULL, ARG_LOG_LEVEL                },
707                 { "log-target",               required_argument, NULL, ARG_LOG_TARGET               },
708                 { "log-color",                optional_argument, NULL, ARG_LOG_COLOR                },
709                 { "log-location",             optional_argument, NULL, ARG_LOG_LOCATION             },
710                 { "unit",                     required_argument, NULL, ARG_UNIT                     },
711                 { "system",                   no_argument,       NULL, ARG_SYSTEM                   },
712                 { "user",                     no_argument,       NULL, ARG_USER                     },
713                 { "test",                     no_argument,       NULL, ARG_TEST                     },
714                 { "no-pager",                 no_argument,       NULL, ARG_NO_PAGER                 },
715                 { "help",                     no_argument,       NULL, 'h'                          },
716                 { "version",                  no_argument,       NULL, ARG_VERSION                  },
717                 { "dump-configuration-items", no_argument,       NULL, ARG_DUMP_CONFIGURATION_ITEMS },
718                 { "dump-core",                optional_argument, NULL, ARG_DUMP_CORE                },
719                 { "crash-shell",              optional_argument, NULL, ARG_CRASH_SHELL              },
720                 { "confirm-spawn",            optional_argument, NULL, ARG_CONFIRM_SPAWN            },
721                 { "show-status",              optional_argument, NULL, ARG_SHOW_STATUS              },
722                 { "deserialize",              required_argument, NULL, ARG_DESERIALIZE              },
723                 { "switched-root",            no_argument,       NULL, ARG_SWITCHED_ROOT            },
724                 { "default-standard-output",  required_argument, NULL, ARG_DEFAULT_STD_OUTPUT,      },
725                 { "default-standard-error",   required_argument, NULL, ARG_DEFAULT_STD_ERROR,       },
726                 {}
727         };
728
729         int c, r;
730
731         assert(argc >= 1);
732         assert(argv);
733
734         if (getpid() == 1)
735                 opterr = 0;
736
737         while ((c = getopt_long(argc, argv, "hDbsz:", options, NULL)) >= 0)
738
739                 switch (c) {
740
741                 case ARG_LOG_LEVEL:
742                         r = log_set_max_level_from_string(optarg);
743                         if (r < 0) {
744                                 log_error("Failed to parse log level %s.", optarg);
745                                 return r;
746                         }
747
748                         break;
749
750                 case ARG_LOG_TARGET:
751                         r = log_set_target_from_string(optarg);
752                         if (r < 0) {
753                                 log_error("Failed to parse log target %s.", optarg);
754                                 return r;
755                         }
756
757                         break;
758
759                 case ARG_LOG_COLOR:
760
761                         if (optarg) {
762                                 r = log_show_color_from_string(optarg);
763                                 if (r < 0) {
764                                         log_error("Failed to parse log color setting %s.", optarg);
765                                         return r;
766                                 }
767                         } else
768                                 log_show_color(true);
769
770                         break;
771
772                 case ARG_LOG_LOCATION:
773                         if (optarg) {
774                                 r = log_show_location_from_string(optarg);
775                                 if (r < 0) {
776                                         log_error("Failed to parse log location setting %s.", optarg);
777                                         return r;
778                                 }
779                         } else
780                                 log_show_location(true);
781
782                         break;
783
784                 case ARG_DEFAULT_STD_OUTPUT:
785                         r = exec_output_from_string(optarg);
786                         if (r < 0) {
787                                 log_error("Failed to parse default standard output setting %s.", optarg);
788                                 return r;
789                         } else
790                                 arg_default_std_output = r;
791                         break;
792
793                 case ARG_DEFAULT_STD_ERROR:
794                         r = exec_output_from_string(optarg);
795                         if (r < 0) {
796                                 log_error("Failed to parse default standard error output setting %s.", optarg);
797                                 return r;
798                         } else
799                                 arg_default_std_error = r;
800                         break;
801
802                 case ARG_UNIT:
803
804                         r = set_default_unit(optarg);
805                         if (r < 0)
806                                 return log_error_errno(r, "Failed to set default unit %s: %m", optarg);
807
808                         break;
809
810                 case ARG_SYSTEM:
811                         arg_running_as = SYSTEMD_SYSTEM;
812                         break;
813
814                 case ARG_USER:
815                         arg_running_as = SYSTEMD_USER;
816                         break;
817
818                 case ARG_TEST:
819                         arg_action = ACTION_TEST;
820                         if (arg_no_pager < 0)
821                                 arg_no_pager = true;
822                         break;
823
824                 case ARG_NO_PAGER:
825                         arg_no_pager = true;
826                         break;
827
828                 case ARG_VERSION:
829                         arg_action = ACTION_VERSION;
830                         break;
831
832                 case ARG_DUMP_CONFIGURATION_ITEMS:
833                         arg_action = ACTION_DUMP_CONFIGURATION_ITEMS;
834                         break;
835
836                 case ARG_DUMP_CORE:
837                         r = optarg ? parse_boolean(optarg) : 1;
838                         if (r < 0) {
839                                 log_error("Failed to parse dump core boolean %s.", optarg);
840                                 return r;
841                         }
842                         arg_dump_core = r;
843                         break;
844
845                 case ARG_CRASH_SHELL:
846                         r = optarg ? parse_boolean(optarg) : 1;
847                         if (r < 0) {
848                                 log_error("Failed to parse crash shell boolean %s.", optarg);
849                                 return r;
850                         }
851                         arg_crash_shell = r;
852                         break;
853
854                 case ARG_CONFIRM_SPAWN:
855                         r = optarg ? parse_boolean(optarg) : 1;
856                         if (r < 0) {
857                                 log_error("Failed to parse confirm spawn boolean %s.", optarg);
858                                 return r;
859                         }
860                         arg_confirm_spawn = r;
861                         break;
862
863                 case ARG_SHOW_STATUS:
864                         if (optarg) {
865                                 r = parse_show_status(optarg, &arg_show_status);
866                                 if (r < 0) {
867                                         log_error("Failed to parse show status boolean %s.", optarg);
868                                         return r;
869                                 }
870                         } else
871                                 arg_show_status = SHOW_STATUS_YES;
872                         break;
873
874                 case ARG_DESERIALIZE: {
875                         int fd;
876                         FILE *f;
877
878                         r = safe_atoi(optarg, &fd);
879                         if (r < 0 || fd < 0) {
880                                 log_error("Failed to parse deserialize option %s.", optarg);
881                                 return r < 0 ? r : -EINVAL;
882                         }
883
884                         fd_cloexec(fd, true);
885
886                         f = fdopen(fd, "r");
887                         if (!f)
888                                 return log_error_errno(errno, "Failed to open serialization fd: %m");
889
890                         if (arg_serialization)
891                                 fclose(arg_serialization);
892
893                         arg_serialization = f;
894
895                         break;
896                 }
897
898                 case ARG_SWITCHED_ROOT:
899                         arg_switched_root = true;
900                         break;
901
902                 case 'h':
903                         arg_action = ACTION_HELP;
904                         if (arg_no_pager < 0)
905                                 arg_no_pager = true;
906                         break;
907
908                 case 'D':
909                         log_set_max_level(LOG_DEBUG);
910                         break;
911
912                 case 'b':
913                 case 's':
914                 case 'z':
915                         /* Just to eat away the sysvinit kernel
916                          * cmdline args without getopt() error
917                          * messages that we'll parse in
918                          * parse_proc_cmdline_word() or ignore. */
919
920                 case '?':
921                         if (getpid() != 1)
922                                 return -EINVAL;
923                         else
924                                 return 0;
925
926                 default:
927                         assert_not_reached("Unhandled option code.");
928                 }
929
930         if (optind < argc && getpid() != 1) {
931                 /* Hmm, when we aren't run as init system
932                  * let's complain about excess arguments */
933
934                 log_error("Excess arguments.");
935                 return -EINVAL;
936         }
937
938         return 0;
939 }
940
941 static int help(void) {
942
943         printf("%s [OPTIONS...]\n\n"
944                "Starts up and maintains the system or user services.\n\n"
945                "  -h --help                      Show this help\n"
946                "     --test                      Determine startup sequence, dump it and exit\n"
947                "     --no-pager                  Do not pipe output into a pager\n"
948                "     --dump-configuration-items  Dump understood unit configuration items\n"
949                "     --unit=UNIT                 Set default unit\n"
950                "     --system                    Run a system instance, even if PID != 1\n"
951                "     --user                      Run a user instance\n"
952                "     --dump-core[=0|1]           Dump core on crash\n"
953                "     --crash-shell[=0|1]         Run shell on crash\n"
954                "     --confirm-spawn[=0|1]       Ask for confirmation when spawning processes\n"
955                "     --show-status[=0|1]         Show status updates on the console during bootup\n"
956                "     --log-target=TARGET         Set log target (console, journal, kmsg, journal-or-kmsg, null)\n"
957                "     --log-level=LEVEL           Set log level (debug, info, notice, warning, err, crit, alert, emerg)\n"
958                "     --log-color[=0|1]           Highlight important log messages\n"
959                "     --log-location[=0|1]        Include code location in log messages\n"
960                "     --default-standard-output=  Set default standard output for services\n"
961                "     --default-standard-error=   Set default standard error output for services\n",
962                program_invocation_short_name);
963
964         return 0;
965 }
966
967 static int version(void) {
968         puts(PACKAGE_STRING);
969         puts(SYSTEMD_FEATURES);
970
971         return 0;
972 }
973
974 static int prepare_reexecute(Manager *m, FILE **_f, FDSet **_fds, bool switching_root) {
975         FILE *f = NULL;
976         FDSet *fds = NULL;
977         int r;
978
979         assert(m);
980         assert(_f);
981         assert(_fds);
982
983         r = manager_open_serialization(m, &f);
984         if (r < 0) {
985                 log_error_errno(r, "Failed to create serialization file: %m");
986                 goto fail;
987         }
988
989         /* Make sure nothing is really destructed when we shut down */
990         m->n_reloading ++;
991         bus_manager_send_reloading(m, true);
992
993         fds = fdset_new();
994         if (!fds) {
995                 r = -ENOMEM;
996                 log_error_errno(r, "Failed to allocate fd set: %m");
997                 goto fail;
998         }
999
1000         r = manager_serialize(m, f, fds, switching_root);
1001         if (r < 0) {
1002                 log_error_errno(r, "Failed to serialize state: %m");
1003                 goto fail;
1004         }
1005
1006         if (fseeko(f, 0, SEEK_SET) < 0) {
1007                 log_error_errno(errno, "Failed to rewind serialization fd: %m");
1008                 goto fail;
1009         }
1010
1011         r = fd_cloexec(fileno(f), false);
1012         if (r < 0) {
1013                 log_error_errno(r, "Failed to disable O_CLOEXEC for serialization: %m");
1014                 goto fail;
1015         }
1016
1017         r = fdset_cloexec(fds, false);
1018         if (r < 0) {
1019                 log_error_errno(r, "Failed to disable O_CLOEXEC for serialization fds: %m");
1020                 goto fail;
1021         }
1022
1023         *_f = f;
1024         *_fds = fds;
1025
1026         return 0;
1027
1028 fail:
1029         fdset_free(fds);
1030
1031         if (f)
1032                 fclose(f);
1033
1034         return r;
1035 }
1036
1037 static int bump_rlimit_nofile(struct rlimit *saved_rlimit) {
1038         struct rlimit nl;
1039         int r;
1040
1041         assert(saved_rlimit);
1042
1043         /* Save the original RLIMIT_NOFILE so that we can reset it
1044          * later when transitioning from the initrd to the main
1045          * systemd or suchlike. */
1046         if (getrlimit(RLIMIT_NOFILE, saved_rlimit) < 0)
1047                 return log_error_errno(errno, "Reading RLIMIT_NOFILE failed: %m");
1048
1049         /* Make sure forked processes get the default kernel setting */
1050         if (!arg_default_rlimit[RLIMIT_NOFILE]) {
1051                 struct rlimit *rl;
1052
1053                 rl = newdup(struct rlimit, saved_rlimit, 1);
1054                 if (!rl)
1055                         return log_oom();
1056
1057                 arg_default_rlimit[RLIMIT_NOFILE] = rl;
1058         }
1059
1060         /* Bump up the resource limit for ourselves substantially */
1061         nl.rlim_cur = nl.rlim_max = 64*1024;
1062         r = setrlimit_closest(RLIMIT_NOFILE, &nl);
1063         if (r < 0)
1064                 return log_error_errno(r, "Setting RLIMIT_NOFILE failed: %m");
1065
1066         return 0;
1067 }
1068
1069 static void test_mtab(void) {
1070
1071         static const char ok[] =
1072                 "/proc/self/mounts\0"
1073                 "/proc/mounts\0"
1074                 "../proc/self/mounts\0"
1075                 "../proc/mounts\0";
1076
1077         _cleanup_free_ char *p = NULL;
1078         int r;
1079
1080         /* Check that /etc/mtab is a symlink to the right place or
1081          * non-existing. But certainly not a file, or a symlink to
1082          * some weird place... */
1083
1084         r = readlink_malloc("/etc/mtab", &p);
1085         if (r == -ENOENT)
1086                 return;
1087         if (r >= 0 && nulstr_contains(ok, p))
1088                 return;
1089
1090         log_warning("/etc/mtab is not a symlink or not pointing to /proc/self/mounts. "
1091                     "This is not supported anymore. "
1092                     "Please make sure to replace this file by a symlink to avoid incorrect or misleading mount(8) output.");
1093 }
1094
1095 static void test_usr(void) {
1096
1097         /* Check that /usr is not a separate fs */
1098
1099         if (dir_is_empty("/usr") <= 0)
1100                 return;
1101
1102         log_warning("/usr appears to be on its own filesytem and is not already mounted. This is not a supported setup. "
1103                     "Some things will probably break (sometimes even silently) in mysterious ways. "
1104                     "Consult http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken for more information.");
1105 }
1106
1107 static int initialize_join_controllers(void) {
1108         /* By default, mount "cpu" + "cpuacct" together, and "net_cls"
1109          * + "net_prio". We'd like to add "cpuset" to the mix, but
1110          * "cpuset" does't really work for groups with no initialized
1111          * attributes. */
1112
1113         arg_join_controllers = new(char**, 3);
1114         if (!arg_join_controllers)
1115                 return -ENOMEM;
1116
1117         arg_join_controllers[0] = strv_new("cpu", "cpuacct", NULL);
1118         arg_join_controllers[1] = strv_new("net_cls", "net_prio", NULL);
1119         arg_join_controllers[2] = NULL;
1120
1121         if (!arg_join_controllers[0] || !arg_join_controllers[1]) {
1122                 free_join_controllers();
1123                 return -ENOMEM;
1124         }
1125
1126         return 0;
1127 }
1128
1129 static int enforce_syscall_archs(Set *archs) {
1130 #ifdef HAVE_SECCOMP
1131         scmp_filter_ctx *seccomp;
1132         Iterator i;
1133         void *id;
1134         int r;
1135
1136         seccomp = seccomp_init(SCMP_ACT_ALLOW);
1137         if (!seccomp)
1138                 return log_oom();
1139
1140         SET_FOREACH(id, arg_syscall_archs, i) {
1141                 r = seccomp_arch_add(seccomp, PTR_TO_UINT32(id) - 1);
1142                 if (r == -EEXIST)
1143                         continue;
1144                 if (r < 0) {
1145                         log_error_errno(r, "Failed to add architecture to seccomp: %m");
1146                         goto finish;
1147                 }
1148         }
1149
1150         r = seccomp_attr_set(seccomp, SCMP_FLTATR_CTL_NNP, 0);
1151         if (r < 0) {
1152                 log_error_errno(r, "Failed to unset NO_NEW_PRIVS: %m");
1153                 goto finish;
1154         }
1155
1156         r = seccomp_load(seccomp);
1157         if (r < 0)
1158                 log_error_errno(r, "Failed to add install architecture seccomp: %m");
1159
1160 finish:
1161         seccomp_release(seccomp);
1162         return r;
1163 #else
1164         return 0;
1165 #endif
1166 }
1167
1168 static int status_welcome(void) {
1169         _cleanup_free_ char *pretty_name = NULL, *ansi_color = NULL;
1170         int r;
1171
1172         r = parse_env_file("/etc/os-release", NEWLINE,
1173                            "PRETTY_NAME", &pretty_name,
1174                            "ANSI_COLOR", &ansi_color,
1175                            NULL);
1176         if (r == -ENOENT) {
1177                 r = parse_env_file("/usr/lib/os-release", NEWLINE,
1178                                    "PRETTY_NAME", &pretty_name,
1179                                    "ANSI_COLOR", &ansi_color,
1180                                    NULL);
1181         }
1182
1183         if (r < 0 && r != -ENOENT)
1184                 log_warning_errno(r, "Failed to read os-release file: %m");
1185
1186         return status_printf(NULL, false, false,
1187                              "\nWelcome to \x1B[%sm%s\x1B[0m!\n",
1188                              isempty(ansi_color) ? "1" : ansi_color,
1189                              isempty(pretty_name) ? "Linux" : pretty_name);
1190 }
1191
1192 static int write_container_id(void) {
1193         const char *c;
1194
1195         c = getenv("container");
1196         if (isempty(c))
1197                 return 0;
1198
1199         return write_string_file("/run/systemd/container", c);
1200 }
1201
1202 int main(int argc, char *argv[]) {
1203         Manager *m = NULL;
1204         int r, retval = EXIT_FAILURE;
1205         usec_t before_startup, after_startup;
1206         char timespan[FORMAT_TIMESPAN_MAX];
1207         FDSet *fds = NULL;
1208         bool reexecute = false;
1209         const char *shutdown_verb = NULL;
1210         dual_timestamp initrd_timestamp = { 0ULL, 0ULL };
1211         dual_timestamp userspace_timestamp = { 0ULL, 0ULL };
1212         dual_timestamp kernel_timestamp = { 0ULL, 0ULL };
1213         dual_timestamp security_start_timestamp = { 0ULL, 0ULL };
1214         dual_timestamp security_finish_timestamp = { 0ULL, 0ULL };
1215         static char systemd[] = "systemd";
1216         bool skip_setup = false;
1217         unsigned j;
1218         bool loaded_policy = false;
1219         bool arm_reboot_watchdog = false;
1220         bool queue_default_job = false;
1221         bool empty_etc = false;
1222         char *switch_root_dir = NULL, *switch_root_init = NULL;
1223         static struct rlimit saved_rlimit_nofile = { 0, 0 };
1224         const char *error_message = NULL;
1225
1226 #ifdef HAVE_SYSV_COMPAT
1227         if (getpid() != 1 && strstr(program_invocation_short_name, "init")) {
1228                 /* This is compatibility support for SysV, where
1229                  * calling init as a user is identical to telinit. */
1230
1231                 errno = -ENOENT;
1232                 execv(SYSTEMCTL_BINARY_PATH, argv);
1233                 log_error_errno(errno, "Failed to exec " SYSTEMCTL_BINARY_PATH ": %m");
1234                 return 1;
1235         }
1236 #endif
1237
1238         dual_timestamp_from_monotonic(&kernel_timestamp, 0);
1239         dual_timestamp_get(&userspace_timestamp);
1240
1241         /* Determine if this is a reexecution or normal bootup. We do
1242          * the full command line parsing much later, so let's just
1243          * have a quick peek here. */
1244         if (strv_find(argv+1, "--deserialize"))
1245                 skip_setup = true;
1246
1247         /* If we have switched root, do all the special setup
1248          * things */
1249         if (strv_find(argv+1, "--switched-root"))
1250                 skip_setup = false;
1251
1252         /* If we get started via the /sbin/init symlink then we are
1253            called 'init'. After a subsequent reexecution we are then
1254            called 'systemd'. That is confusing, hence let's call us
1255            systemd right-away. */
1256         program_invocation_short_name = systemd;
1257         prctl(PR_SET_NAME, systemd);
1258
1259         saved_argv = argv;
1260         saved_argc = argc;
1261
1262         log_show_color(isatty(STDERR_FILENO) > 0);
1263         log_set_upgrade_syslog_to_journal(true);
1264
1265         /* Disable the umask logic */
1266         if (getpid() == 1)
1267                 umask(0);
1268
1269         if (getpid() == 1 && detect_container(NULL) <= 0) {
1270
1271                 /* Running outside of a container as PID 1 */
1272                 arg_running_as = SYSTEMD_SYSTEM;
1273                 make_null_stdio();
1274                 log_set_target(LOG_TARGET_KMSG);
1275                 log_open();
1276
1277                 if (in_initrd())
1278                         initrd_timestamp = userspace_timestamp;
1279
1280                 if (!skip_setup) {
1281                         mount_setup_early();
1282                         dual_timestamp_get(&security_start_timestamp);
1283                         if (mac_selinux_setup(&loaded_policy) < 0) {
1284                                 error_message = "Failed to load SELinux policy";
1285                                 goto finish;
1286                         } else if (ima_setup() < 0) {
1287                                 error_message = "Failed to load IMA policy";
1288                                 goto finish;
1289                         } else if (mac_smack_setup(&loaded_policy) < 0) {
1290                                 error_message = "Failed to load SMACK policy";
1291                                 goto finish;
1292                         }
1293                         dual_timestamp_get(&security_finish_timestamp);
1294                 }
1295
1296                 if (mac_selinux_init(NULL) < 0) {
1297                         error_message = "Failed to initialize SELinux policy";
1298                         goto finish;
1299                 }
1300
1301                 if (!skip_setup) {
1302                         if (clock_is_localtime() > 0) {
1303                                 int min;
1304
1305                                 /*
1306                                  * The very first call of settimeofday() also does a time warp in the kernel.
1307                                  *
1308                                  * In the rtc-in-local time mode, we set the kernel's timezone, and rely on
1309                                  * external tools to take care of maintaining the RTC and do all adjustments.
1310                                  * This matches the behavior of Windows, which leaves the RTC alone if the
1311                                  * registry tells that the RTC runs in UTC.
1312                                  */
1313                                 r = clock_set_timezone(&min);
1314                                 if (r < 0)
1315                                         log_error_errno(r, "Failed to apply local time delta, ignoring: %m");
1316                                 else
1317                                         log_info("RTC configured in localtime, applying delta of %i minutes to system time.", min);
1318                         } else if (!in_initrd()) {
1319                                 /*
1320                                  * Do a dummy very first call to seal the kernel's time warp magic.
1321                                  *
1322                                  * Do not call this this from inside the initrd. The initrd might not
1323                                  * carry /etc/adjtime with LOCAL, but the real system could be set up
1324                                  * that way. In such case, we need to delay the time-warp or the sealing
1325                                  * until we reach the real system.
1326                                  *
1327                                  * Do no set the kernel's timezone. The concept of local time cannot
1328                                  * be supported reliably, the time will jump or be incorrect at every daylight
1329                                  * saving time change. All kernel local time concepts will be treated
1330                                  * as UTC that way.
1331                                  */
1332                                 clock_reset_timewarp();
1333                         }
1334                 }
1335
1336                 /* Set the default for later on, but don't actually
1337                  * open the logs like this for now. Note that if we
1338                  * are transitioning from the initrd there might still
1339                  * be journal fd open, and we shouldn't attempt
1340                  * opening that before we parsed /proc/cmdline which
1341                  * might redirect output elsewhere. */
1342                 log_set_target(LOG_TARGET_JOURNAL_OR_KMSG);
1343
1344         } else if (getpid() == 1) {
1345                 /* Running inside a container, as PID 1 */
1346                 arg_running_as = SYSTEMD_SYSTEM;
1347                 log_set_target(LOG_TARGET_CONSOLE);
1348                 log_close_console(); /* force reopen of /dev/console */
1349                 log_open();
1350
1351                 /* For the later on, see above... */
1352                 log_set_target(LOG_TARGET_JOURNAL);
1353
1354                 /* clear the kernel timestamp,
1355                  * because we are in a container */
1356                 kernel_timestamp.monotonic = 0ULL;
1357                 kernel_timestamp.realtime = 0ULL;
1358
1359         } else {
1360                 /* Running as user instance */
1361                 arg_running_as = SYSTEMD_USER;
1362                 log_set_target(LOG_TARGET_AUTO);
1363                 log_open();
1364
1365                 /* clear the kernel timestamp,
1366                  * because we are not PID 1 */
1367                 kernel_timestamp.monotonic = 0ULL;
1368                 kernel_timestamp.realtime = 0ULL;
1369         }
1370
1371         /* Initialize default unit */
1372         r = set_default_unit(SPECIAL_DEFAULT_TARGET);
1373         if (r < 0) {
1374                 log_emergency_errno(r, "Failed to set default unit %s: %m", SPECIAL_DEFAULT_TARGET);
1375                 error_message = "Failed to set default unit";
1376                 goto finish;
1377         }
1378
1379         r = initialize_join_controllers();
1380         if (r < 0) {
1381                 error_message = "Failed to initalize cgroup controllers";
1382                 goto finish;
1383         }
1384
1385         /* Mount /proc, /sys and friends, so that /proc/cmdline and
1386          * /proc/$PID/fd is available. */
1387         if (getpid() == 1) {
1388
1389                 /* Load the kernel modules early, so that we kdbus.ko is loaded before kdbusfs shall be mounted */
1390                 if (!skip_setup)
1391                         kmod_setup();
1392
1393                 r = mount_setup(loaded_policy);
1394                 if (r < 0) {
1395                         error_message = "Failed to mount API filesystems";
1396                         goto finish;
1397                 }
1398         }
1399
1400         /* Reset all signal handlers. */
1401         assert_se(reset_all_signal_handlers() == 0);
1402
1403         ignore_signals(SIGNALS_IGNORE, -1);
1404
1405         if (parse_config_file() < 0) {
1406                 error_message = "Failed to parse config file";
1407                 goto finish;
1408         }
1409
1410         if (arg_running_as == SYSTEMD_SYSTEM) {
1411                 r = parse_proc_cmdline(parse_proc_cmdline_item);
1412                 if (r < 0)
1413                         log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
1414         }
1415
1416         /* Note that this also parses bits from the kernel command
1417          * line, including "debug". */
1418         log_parse_environment();
1419
1420         if (parse_argv(argc, argv) < 0) {
1421                 error_message = "Failed to parse commandline arguments";
1422                 goto finish;
1423         }
1424
1425         if (arg_action == ACTION_TEST &&
1426             geteuid() == 0) {
1427                 log_error("Don't run test mode as root.");
1428                 goto finish;
1429         }
1430
1431         if (arg_running_as == SYSTEMD_USER &&
1432             arg_action == ACTION_RUN &&
1433             sd_booted() <= 0) {
1434                 log_error("Trying to run as user instance, but the system has not been booted with systemd.");
1435                 goto finish;
1436         }
1437
1438         if (arg_running_as == SYSTEMD_SYSTEM &&
1439             arg_action == ACTION_RUN &&
1440             running_in_chroot() > 0) {
1441                 log_error("Cannot be run in a chroot() environment.");
1442                 goto finish;
1443         }
1444
1445         if (arg_action == ACTION_TEST)
1446                 skip_setup = true;
1447
1448         pager_open_if_enabled();
1449
1450         if (arg_action == ACTION_HELP) {
1451                 retval = help();
1452                 goto finish;
1453         } else if (arg_action == ACTION_VERSION) {
1454                 retval = version();
1455                 goto finish;
1456         } else if (arg_action == ACTION_DUMP_CONFIGURATION_ITEMS) {
1457                 unit_dump_config_items(stdout);
1458                 retval = EXIT_SUCCESS;
1459                 goto finish;
1460         } else if (arg_action == ACTION_DONE) {
1461                 retval = EXIT_SUCCESS;
1462                 goto finish;
1463         }
1464
1465         if (arg_running_as == SYSTEMD_USER &&
1466             !getenv("XDG_RUNTIME_DIR")) {
1467                 log_error("Trying to run as user instance, but $XDG_RUNTIME_DIR is not set.");
1468                 goto finish;
1469         }
1470
1471         assert_se(arg_action == ACTION_RUN || arg_action == ACTION_TEST);
1472
1473         /* Close logging fds, in order not to confuse fdset below */
1474         log_close();
1475
1476         /* Remember open file descriptors for later deserialization */
1477         r = fdset_new_fill(&fds);
1478         if (r < 0) {
1479                 log_emergency_errno(r, "Failed to allocate fd set: %m");
1480                 error_message = "Failed to allocate fd set";
1481                 goto finish;
1482         } else
1483                 fdset_cloexec(fds, true);
1484
1485         if (arg_serialization)
1486                 assert_se(fdset_remove(fds, fileno(arg_serialization)) >= 0);
1487
1488         if (arg_running_as == SYSTEMD_SYSTEM)
1489                 /* Become a session leader if we aren't one yet. */
1490                 setsid();
1491
1492         /* Move out of the way, so that we won't block unmounts */
1493         assert_se(chdir("/")  == 0);
1494
1495         /* Reset the console, but only if this is really init and we
1496          * are freshly booted */
1497         if (arg_running_as == SYSTEMD_SYSTEM && arg_action == ACTION_RUN) {
1498
1499                 /* If we are init, we connect stdin/stdout/stderr to
1500                  * /dev/null and make sure we don't have a controlling
1501                  * tty. */
1502                 release_terminal();
1503
1504                 if (getpid() == 1 && !skip_setup)
1505                         console_setup();
1506         }
1507
1508         /* Open the logging devices, if possible and necessary */
1509         log_open();
1510
1511         if (arg_show_status == _SHOW_STATUS_UNSET)
1512                 arg_show_status = SHOW_STATUS_YES;
1513
1514         /* Make sure we leave a core dump without panicing the
1515          * kernel. */
1516         if (getpid() == 1) {
1517                 install_crash_handler();
1518
1519                 r = mount_cgroup_controllers(arg_join_controllers);
1520                 if (r < 0)
1521                         goto finish;
1522         }
1523
1524         if (arg_running_as == SYSTEMD_SYSTEM) {
1525                 const char *virtualization = NULL;
1526
1527                 log_info(PACKAGE_STRING " running in %ssystem mode. (" SYSTEMD_FEATURES ")",
1528                          arg_action == ACTION_TEST ? "test " : "" );
1529
1530                 detect_virtualization(&virtualization);
1531                 if (virtualization)
1532                         log_info("Detected virtualization '%s'.", virtualization);
1533
1534                 write_container_id();
1535
1536                 log_info("Detected architecture '%s'.", architecture_to_string(uname_architecture()));
1537
1538                 if (in_initrd())
1539                         log_info("Running in initial RAM disk.");
1540
1541                 /* Let's check whether /etc is already populated. We
1542                  * don't actually really check for that, but use
1543                  * /etc/machine-id as flag file. This allows container
1544                  * managers and installers to provision a couple of
1545                  * files already. If the container manager wants to
1546                  * provision the machine ID itself it should pass
1547                  * $container_uuid to PID 1.*/
1548
1549                 empty_etc = access("/etc/machine-id", F_OK) < 0;
1550                 if (empty_etc)
1551                         log_info("Running with unpopulated /etc.");
1552         } else {
1553                 _cleanup_free_ char *t;
1554
1555                 t = uid_to_name(getuid());
1556                 log_debug(PACKAGE_STRING " running in %suser mode for user "UID_FMT"/%s. (" SYSTEMD_FEATURES ")",
1557                           arg_action == ACTION_TEST ? " test" : "", getuid(), t);
1558         }
1559
1560         if (arg_running_as == SYSTEMD_SYSTEM && !skip_setup) {
1561                 if (arg_show_status > 0 || plymouth_running())
1562                         status_welcome();
1563
1564                 hostname_setup();
1565                 machine_id_setup(NULL);
1566                 loopback_setup();
1567
1568                 test_mtab();
1569                 test_usr();
1570         }
1571
1572         if (arg_running_as == SYSTEMD_SYSTEM && arg_runtime_watchdog > 0)
1573                 watchdog_set_timeout(&arg_runtime_watchdog);
1574
1575         if (arg_timer_slack_nsec != NSEC_INFINITY)
1576                 if (prctl(PR_SET_TIMERSLACK, arg_timer_slack_nsec) < 0)
1577                         log_error_errno(errno, "Failed to adjust timer slack: %m");
1578
1579         if (arg_capability_bounding_set_drop) {
1580                 r = capability_bounding_set_drop_usermode(arg_capability_bounding_set_drop);
1581                 if (r < 0) {
1582                         log_emergency_errno(r, "Failed to drop capability bounding set of usermode helpers: %m");
1583                         error_message = "Failed to drop capability bounding set of usermode helpers";
1584                         goto finish;
1585                 }
1586                 r = capability_bounding_set_drop(arg_capability_bounding_set_drop, true);
1587                 if (r < 0) {
1588                         log_emergency_errno(r, "Failed to drop capability bounding set: %m");
1589                         error_message = "Failed to drop capability bounding set";
1590                         goto finish;
1591                 }
1592         }
1593
1594         if (arg_syscall_archs) {
1595                 r = enforce_syscall_archs(arg_syscall_archs);
1596                 if (r < 0) {
1597                         error_message = "Failed to set syscall architectures";
1598                         goto finish;
1599                 }
1600         }
1601
1602         if (arg_running_as == SYSTEMD_USER) {
1603                 /* Become reaper of our children */
1604                 if (prctl(PR_SET_CHILD_SUBREAPER, 1) < 0) {
1605                         log_warning_errno(errno, "Failed to make us a subreaper: %m");
1606                         if (errno == EINVAL)
1607                                 log_info("Perhaps the kernel version is too old (< 3.4?)");
1608                 }
1609         }
1610
1611         if (arg_running_as == SYSTEMD_SYSTEM) {
1612                 bump_rlimit_nofile(&saved_rlimit_nofile);
1613
1614                 if (empty_etc) {
1615                         r = unit_file_preset_all(UNIT_FILE_SYSTEM, false, NULL, UNIT_FILE_PRESET_FULL, false, NULL, 0);
1616                         if (r < 0)
1617                                 log_warning_errno(r, "Failed to populate /etc with preset unit settings, ignoring: %m");
1618                         else
1619                                 log_info("Populated /etc with preset unit settings.");
1620                 }
1621         }
1622
1623         r = manager_new(arg_running_as, arg_action == ACTION_TEST, &m);
1624         if (r < 0) {
1625                 log_emergency_errno(r, "Failed to allocate manager object: %m");
1626                 error_message = "Failed to allocate manager object";
1627                 goto finish;
1628         }
1629
1630         m->confirm_spawn = arg_confirm_spawn;
1631         m->default_timer_accuracy_usec = arg_default_timer_accuracy_usec;
1632         m->default_std_output = arg_default_std_output;
1633         m->default_std_error = arg_default_std_error;
1634         m->default_restart_usec = arg_default_restart_usec;
1635         m->default_timeout_start_usec = arg_default_timeout_start_usec;
1636         m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
1637         m->default_start_limit_interval = arg_default_start_limit_interval;
1638         m->default_start_limit_burst = arg_default_start_limit_burst;
1639         m->default_cpu_accounting = arg_default_cpu_accounting;
1640         m->default_blockio_accounting = arg_default_blockio_accounting;
1641         m->default_memory_accounting = arg_default_memory_accounting;
1642         m->runtime_watchdog = arg_runtime_watchdog;
1643         m->shutdown_watchdog = arg_shutdown_watchdog;
1644
1645         m->userspace_timestamp = userspace_timestamp;
1646         m->kernel_timestamp = kernel_timestamp;
1647         m->initrd_timestamp = initrd_timestamp;
1648         m->security_start_timestamp = security_start_timestamp;
1649         m->security_finish_timestamp = security_finish_timestamp;
1650
1651         manager_set_default_rlimits(m, arg_default_rlimit);
1652         manager_environment_add(m, NULL, arg_default_environment);
1653         manager_set_show_status(m, arg_show_status);
1654         manager_set_first_boot(m, empty_etc);
1655
1656         /* Remember whether we should queue the default job */
1657         queue_default_job = !arg_serialization || arg_switched_root;
1658
1659         before_startup = now(CLOCK_MONOTONIC);
1660
1661         r = manager_startup(m, arg_serialization, fds);
1662         if (r < 0)
1663                 log_error_errno(r, "Failed to fully start up daemon: %m");
1664
1665         /* This will close all file descriptors that were opened, but
1666          * not claimed by any unit. */
1667         fdset_free(fds);
1668         fds = NULL;
1669
1670         if (arg_serialization) {
1671                 fclose(arg_serialization);
1672                 arg_serialization = NULL;
1673         }
1674
1675         if (queue_default_job) {
1676                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
1677                 Unit *target = NULL;
1678                 Job *default_unit_job;
1679
1680                 log_debug("Activating default unit: %s", arg_default_unit);
1681
1682                 r = manager_load_unit(m, arg_default_unit, NULL, &error, &target);
1683                 if (r < 0)
1684                         log_error("Failed to load default target: %s", bus_error_message(&error, r));
1685                 else if (target->load_state == UNIT_ERROR || target->load_state == UNIT_NOT_FOUND)
1686                         log_error_errno(target->load_error, "Failed to load default target: %m");
1687                 else if (target->load_state == UNIT_MASKED)
1688                         log_error("Default target masked.");
1689
1690                 if (!target || target->load_state != UNIT_LOADED) {
1691                         log_info("Trying to load rescue target...");
1692
1693                         r = manager_load_unit(m, SPECIAL_RESCUE_TARGET, NULL, &error, &target);
1694                         if (r < 0) {
1695                                 log_emergency("Failed to load rescue target: %s", bus_error_message(&error, r));
1696                                 error_message = "Failed to load rescue target";
1697                                 goto finish;
1698                         } else if (target->load_state == UNIT_ERROR || target->load_state == UNIT_NOT_FOUND) {
1699                                 log_emergency_errno(target->load_error, "Failed to load rescue target: %m");
1700                                 error_message = "Failed to load rescue target";
1701                                 goto finish;
1702                         } else if (target->load_state == UNIT_MASKED) {
1703                                 log_emergency("Rescue target masked.");
1704                                 error_message = "Rescue target masked";
1705                                 goto finish;
1706                         }
1707                 }
1708
1709                 assert(target->load_state == UNIT_LOADED);
1710
1711                 if (arg_action == ACTION_TEST) {
1712                         printf("-> By units:\n");
1713                         manager_dump_units(m, stdout, "\t");
1714                 }
1715
1716                 r = manager_add_job(m, JOB_START, target, JOB_ISOLATE, false, &error, &default_unit_job);
1717                 if (r == -EPERM) {
1718                         log_debug("Default target could not be isolated, starting instead: %s", bus_error_message(&error, r));
1719
1720                         r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, &default_unit_job);
1721                         if (r < 0) {
1722                                 log_emergency("Failed to start default target: %s", bus_error_message(&error, r));
1723                                 error_message = "Failed to start default target";
1724                                 goto finish;
1725                         }
1726                 } else if (r < 0) {
1727                         log_emergency("Failed to isolate default target: %s", bus_error_message(&error, r));
1728                         error_message = "Failed to isolate default target";
1729                         goto finish;
1730                 }
1731
1732                 m->default_unit_job_id = default_unit_job->id;
1733
1734                 after_startup = now(CLOCK_MONOTONIC);
1735                 log_full(arg_action == ACTION_TEST ? LOG_INFO : LOG_DEBUG,
1736                          "Loaded units and determined initial transaction in %s.",
1737                          format_timespan(timespan, sizeof(timespan), after_startup - before_startup, 100 * USEC_PER_MSEC));
1738
1739                 if (arg_action == ACTION_TEST) {
1740                         printf("-> By jobs:\n");
1741                         manager_dump_jobs(m, stdout, "\t");
1742                         retval = EXIT_SUCCESS;
1743                         goto finish;
1744                 }
1745         }
1746
1747         for (;;) {
1748                 r = manager_loop(m);
1749                 if (r < 0) {
1750                         log_emergency_errno(r, "Failed to run main loop: %m");
1751                         error_message = "Failed to run main loop";
1752                         goto finish;
1753                 }
1754
1755                 switch (m->exit_code) {
1756
1757                 case MANAGER_EXIT:
1758                         retval = EXIT_SUCCESS;
1759                         log_debug("Exit.");
1760                         goto finish;
1761
1762                 case MANAGER_RELOAD:
1763                         log_info("Reloading.");
1764                         r = manager_reload(m);
1765                         if (r < 0)
1766                                 log_error_errno(r, "Failed to reload: %m");
1767                         break;
1768
1769                 case MANAGER_REEXECUTE:
1770
1771                         if (prepare_reexecute(m, &arg_serialization, &fds, false) < 0) {
1772                                 error_message = "Failed to prepare for reexection";
1773                                 goto finish;
1774                         }
1775
1776                         reexecute = true;
1777                         log_notice("Reexecuting.");
1778                         goto finish;
1779
1780                 case MANAGER_SWITCH_ROOT:
1781                         /* Steal the switch root parameters */
1782                         switch_root_dir = m->switch_root;
1783                         switch_root_init = m->switch_root_init;
1784                         m->switch_root = m->switch_root_init = NULL;
1785
1786                         if (!switch_root_init)
1787                                 if (prepare_reexecute(m, &arg_serialization, &fds, true) < 0) {
1788                                         error_message = "Failed to prepare for reexection";
1789                                         goto finish;
1790                                 }
1791
1792                         reexecute = true;
1793                         log_notice("Switching root.");
1794                         goto finish;
1795
1796                 case MANAGER_REBOOT:
1797                 case MANAGER_POWEROFF:
1798                 case MANAGER_HALT:
1799                 case MANAGER_KEXEC: {
1800                         static const char * const table[_MANAGER_EXIT_CODE_MAX] = {
1801                                 [MANAGER_REBOOT] = "reboot",
1802                                 [MANAGER_POWEROFF] = "poweroff",
1803                                 [MANAGER_HALT] = "halt",
1804                                 [MANAGER_KEXEC] = "kexec"
1805                         };
1806
1807                         assert_se(shutdown_verb = table[m->exit_code]);
1808                         arm_reboot_watchdog = m->exit_code == MANAGER_REBOOT;
1809
1810                         log_notice("Shutting down.");
1811                         goto finish;
1812                 }
1813
1814                 default:
1815                         assert_not_reached("Unknown exit code.");
1816                 }
1817         }
1818
1819 finish:
1820         pager_close();
1821
1822         m = manager_free(m);
1823
1824         for (j = 0; j < ELEMENTSOF(arg_default_rlimit); j++) {
1825                 free(arg_default_rlimit[j]);
1826                 arg_default_rlimit[j] = NULL;
1827         }
1828
1829         free(arg_default_unit);
1830         arg_default_unit = NULL;
1831
1832         free_join_controllers();
1833
1834         strv_free(arg_default_environment);
1835         arg_default_environment = NULL;
1836
1837         set_free(arg_syscall_archs);
1838         arg_syscall_archs = NULL;
1839
1840         mac_selinux_finish();
1841
1842         if (reexecute) {
1843                 const char **args;
1844                 unsigned i, args_size;
1845
1846                 /* Close and disarm the watchdog, so that the new
1847                  * instance can reinitialize it, but doesn't get
1848                  * rebooted while we do that */
1849                 watchdog_close(true);
1850
1851                 /* Reset the RLIMIT_NOFILE to the kernel default, so
1852                  * that the new systemd can pass the kernel default to
1853                  * its child processes */
1854                 if (saved_rlimit_nofile.rlim_cur > 0)
1855                         setrlimit(RLIMIT_NOFILE, &saved_rlimit_nofile);
1856
1857                 if (switch_root_dir) {
1858                         /* Kill all remaining processes from the
1859                          * initrd, but don't wait for them, so that we
1860                          * can handle the SIGCHLD for them after
1861                          * deserializing. */
1862                         broadcast_signal(SIGTERM, false, true);
1863
1864                         /* And switch root with MS_MOVE, because we remove the old directory afterwards and detach it. */
1865                         r = switch_root(switch_root_dir, "/mnt", true, MS_MOVE);
1866                         if (r < 0)
1867                                 log_error_errno(r, "Failed to switch root, trying to continue: %m");
1868                 }
1869
1870                 args_size = MAX(6, argc+1);
1871                 args = newa(const char*, args_size);
1872
1873                 if (!switch_root_init) {
1874                         char sfd[16];
1875
1876                         /* First try to spawn ourselves with the right
1877                          * path, and with full serialization. We do
1878                          * this only if the user didn't specify an
1879                          * explicit init to spawn. */
1880
1881                         assert(arg_serialization);
1882                         assert(fds);
1883
1884                         snprintf(sfd, sizeof(sfd), "%i", fileno(arg_serialization));
1885                         char_array_0(sfd);
1886
1887                         i = 0;
1888                         args[i++] = SYSTEMD_BINARY_PATH;
1889                         if (switch_root_dir)
1890                                 args[i++] = "--switched-root";
1891                         args[i++] = arg_running_as == SYSTEMD_SYSTEM ? "--system" : "--user";
1892                         args[i++] = "--deserialize";
1893                         args[i++] = sfd;
1894                         args[i++] = NULL;
1895
1896                         /* do not pass along the environment we inherit from the kernel or initrd */
1897                         if (switch_root_dir)
1898                                 clearenv();
1899
1900                         assert(i <= args_size);
1901                         execv(args[0], (char* const*) args);
1902                 }
1903
1904                 /* Try the fallback, if there is any, without any
1905                  * serialization. We pass the original argv[] and
1906                  * envp[]. (Well, modulo the ordering changes due to
1907                  * getopt() in argv[], and some cleanups in envp[],
1908                  * but let's hope that doesn't matter.) */
1909
1910                 if (arg_serialization) {
1911                         fclose(arg_serialization);
1912                         arg_serialization = NULL;
1913                 }
1914
1915                 if (fds) {
1916                         fdset_free(fds);
1917                         fds = NULL;
1918                 }
1919
1920                 /* Reopen the console */
1921                 make_console_stdio();
1922
1923                 for (j = 1, i = 1; j < (unsigned) argc; j++)
1924                         args[i++] = argv[j];
1925                 args[i++] = NULL;
1926                 assert(i <= args_size);
1927
1928                 /* Reenable any blocked signals, especially important
1929                  * if we switch from initial ramdisk to init=... */
1930                 reset_all_signal_handlers();
1931                 reset_signal_mask();
1932
1933                 if (switch_root_init) {
1934                         args[0] = switch_root_init;
1935                         execv(args[0], (char* const*) args);
1936                         log_warning_errno(errno, "Failed to execute configured init, trying fallback: %m");
1937                 }
1938
1939                 args[0] = "/sbin/init";
1940                 execv(args[0], (char* const*) args);
1941
1942                 if (errno == ENOENT) {
1943                         log_warning("No /sbin/init, trying fallback");
1944
1945                         args[0] = "/bin/sh";
1946                         args[1] = NULL;
1947                         execv(args[0], (char* const*) args);
1948                         log_error_errno(errno, "Failed to execute /bin/sh, giving up: %m");
1949                 } else
1950                         log_warning_errno(errno, "Failed to execute /sbin/init, giving up: %m");
1951         }
1952
1953         if (arg_serialization) {
1954                 fclose(arg_serialization);
1955                 arg_serialization = NULL;
1956         }
1957
1958         if (fds) {
1959                 fdset_free(fds);
1960                 fds = NULL;
1961         }
1962
1963 #ifdef HAVE_VALGRIND_VALGRIND_H
1964         /* If we are PID 1 and running under valgrind, then let's exit
1965          * here explicitly. valgrind will only generate nice output on
1966          * exit(), not on exec(), hence let's do the former not the
1967          * latter here. */
1968         if (getpid() == 1 && RUNNING_ON_VALGRIND)
1969                 return 0;
1970 #endif
1971
1972         if (shutdown_verb) {
1973                 char log_level[DECIMAL_STR_MAX(int) + 1];
1974                 const char* command_line[9] = {
1975                         SYSTEMD_SHUTDOWN_BINARY_PATH,
1976                         shutdown_verb,
1977                         "--log-level", log_level,
1978                         "--log-target",
1979                 };
1980                 unsigned pos = 5;
1981                 _cleanup_strv_free_ char **env_block = NULL;
1982
1983                 assert(command_line[pos] == NULL);
1984                 env_block = strv_copy(environ);
1985
1986                 snprintf(log_level, sizeof(log_level), "%d", log_get_max_level());
1987
1988                 switch (log_get_target()) {
1989                 case LOG_TARGET_KMSG:
1990                 case LOG_TARGET_JOURNAL_OR_KMSG:
1991                 case LOG_TARGET_SYSLOG_OR_KMSG:
1992                         command_line[pos++] = "kmsg";
1993                         break;
1994
1995                 case LOG_TARGET_CONSOLE:
1996                 default:
1997                         command_line[pos++] = "console";
1998                         break;
1999                 };
2000
2001                 if (log_get_show_color())
2002                         command_line[pos++] = "--log-color";
2003
2004                 if (log_get_show_location())
2005                         command_line[pos++] = "--log-location";
2006
2007                 assert(pos < ELEMENTSOF(command_line));
2008
2009                 if (arm_reboot_watchdog && arg_shutdown_watchdog > 0) {
2010                         char *e;
2011
2012                         /* If we reboot let's set the shutdown
2013                          * watchdog and tell the shutdown binary to
2014                          * repeatedly ping it */
2015                         watchdog_set_timeout(&arg_shutdown_watchdog);
2016                         watchdog_close(false);
2017
2018                         /* Tell the binary how often to ping, ignore failure */
2019                         if (asprintf(&e, "WATCHDOG_USEC="USEC_FMT, arg_shutdown_watchdog) > 0)
2020                                 strv_push(&env_block, e);
2021                 } else
2022                         watchdog_close(true);
2023
2024                 /* Avoid the creation of new processes forked by the
2025                  * kernel; at this point, we will not listen to the
2026                  * signals anyway */
2027                 if (detect_container(NULL) <= 0)
2028                         cg_uninstall_release_agent(SYSTEMD_CGROUP_CONTROLLER);
2029
2030                 execve(SYSTEMD_SHUTDOWN_BINARY_PATH, (char **) command_line, env_block);
2031                 log_error_errno(errno, "Failed to execute shutdown binary, %s: %m",
2032                           getpid() == 1 ? "freezing" : "quitting");
2033         }
2034
2035         if (getpid() == 1) {
2036                 if (error_message)
2037                         manager_status_printf(NULL, STATUS_TYPE_EMERGENCY,
2038                                               ANSI_HIGHLIGHT_RED_ON "!!!!!!" ANSI_HIGHLIGHT_OFF,
2039                                               "%s, freezing.", error_message);
2040                 freeze();
2041         }
2042
2043         return retval;
2044 }