core: split out various startup safety checks from main() into its own function
No functional changes, just some refactoring to make main() more digestable.
This commit is contained in:
parent
97d1fb94ba
commit
b0d7c98993
|
@ -2091,6 +2091,38 @@ static int load_configuration(int argc, char **argv, const char **ret_error_mess
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int safety_checks(void) {
|
||||
|
||||
if (arg_action == ACTION_TEST &&
|
||||
geteuid() == 0) {
|
||||
log_error("Don't run test mode as root.");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (!arg_system &&
|
||||
arg_action == ACTION_RUN &&
|
||||
sd_booted() <= 0) {
|
||||
log_error("Trying to run as user instance, but the system has not been booted with systemd.");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (!arg_system &&
|
||||
arg_action == ACTION_RUN &&
|
||||
!getenv("XDG_RUNTIME_DIR")) {
|
||||
log_error("Trying to run as user instance, but $XDG_RUNTIME_DIR is not set.");
|
||||
return -EUNATCH;
|
||||
}
|
||||
|
||||
if (arg_system &&
|
||||
arg_action == ACTION_RUN &&
|
||||
running_in_chroot() > 0) {
|
||||
log_error("Cannot be run in a chroot() environment.");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
Manager *m = NULL;
|
||||
int r, retval = EXIT_FAILURE;
|
||||
|
@ -2269,30 +2301,15 @@ int main(int argc, char *argv[]) {
|
|||
if (r < 0)
|
||||
goto finish;
|
||||
|
||||
if (arg_action == ACTION_TEST &&
|
||||
geteuid() == 0) {
|
||||
log_error("Don't run test mode as root.");
|
||||
r = safety_checks();
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!arg_system &&
|
||||
arg_action == ACTION_RUN &&
|
||||
sd_booted() <= 0) {
|
||||
log_error("Trying to run as user instance, but the system has not been booted with systemd.");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (arg_system &&
|
||||
arg_action == ACTION_RUN &&
|
||||
running_in_chroot() > 0) {
|
||||
log_error("Cannot be run in a chroot() environment.");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (IN_SET(arg_action, ACTION_TEST, ACTION_HELP)) {
|
||||
if (IN_SET(arg_action, ACTION_TEST, ACTION_HELP))
|
||||
pager_open(arg_no_pager, false);
|
||||
|
||||
if (arg_action != ACTION_RUN)
|
||||
skip_setup = true;
|
||||
}
|
||||
|
||||
if (arg_action == ACTION_HELP) {
|
||||
retval = help();
|
||||
|
@ -2307,12 +2324,6 @@ int main(int argc, char *argv[]) {
|
|||
goto finish;
|
||||
}
|
||||
|
||||
if (!arg_system &&
|
||||
!getenv("XDG_RUNTIME_DIR")) {
|
||||
log_error("Trying to run as user instance, but $XDG_RUNTIME_DIR is not set.");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
assert_se(IN_SET(arg_action, ACTION_RUN, ACTION_TEST));
|
||||
|
||||
/* Close logging fds, in order not to confuse fdset below */
|
||||
|
|
Loading…
Reference in a new issue