mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-25 06:03:40 +03:00
Merge pull request #2465 from poettering/systemctl-chroot
Fix for #2015
This commit is contained in:
commit
0e3a930a60
@ -28,6 +28,7 @@
|
||||
#include "macro.h"
|
||||
#include "string-util.h"
|
||||
#include "verbs.h"
|
||||
#include "virt.h"
|
||||
|
||||
int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) {
|
||||
const Verb *verb;
|
||||
@ -84,6 +85,11 @@ int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((verb->flags & VERB_NOCHROOT) && running_in_chroot() > 0) {
|
||||
log_info("Running in chroot, ignoring request.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (name)
|
||||
return verb->dispatch(left, argv + optind, userdata);
|
||||
else {
|
||||
|
@ -22,7 +22,8 @@
|
||||
***/
|
||||
|
||||
#define VERB_ANY ((unsigned) -1)
|
||||
#define VERB_DEFAULT 1
|
||||
#define VERB_DEFAULT 1U
|
||||
#define VERB_NOCHROOT 2U
|
||||
|
||||
typedef struct {
|
||||
const char *verb;
|
||||
|
@ -5792,7 +5792,7 @@ static int is_system_running(int argc, char *argv[], void *userdata) {
|
||||
sd_bus *bus;
|
||||
int r;
|
||||
|
||||
if (arg_transport == BUS_TRANSPORT_LOCAL && !sd_booted()) {
|
||||
if (running_in_chroot() > 0 || (arg_transport == BUS_TRANSPORT_LOCAL && !sd_booted())) {
|
||||
if (!arg_quiet)
|
||||
puts("offline");
|
||||
return EXIT_FAILURE;
|
||||
@ -7325,70 +7325,71 @@ static int talk_initctl(void) {
|
||||
static int systemctl_main(int argc, char *argv[]) {
|
||||
|
||||
static const Verb verbs[] = {
|
||||
{ "list-units", VERB_ANY, VERB_ANY, VERB_DEFAULT, list_units },
|
||||
{ "list-unit-files", VERB_ANY, VERB_ANY, 0, list_unit_files },
|
||||
{ "list-sockets", VERB_ANY, VERB_ANY, 0, list_sockets },
|
||||
{ "list-timers", VERB_ANY, VERB_ANY, 0, list_timers },
|
||||
{ "list-jobs", VERB_ANY, VERB_ANY, 0, list_jobs },
|
||||
{ "list-machines", VERB_ANY, VERB_ANY, 0, list_machines },
|
||||
{ "clear-jobs", VERB_ANY, 1, 0, daemon_reload },
|
||||
{ "cancel", VERB_ANY, VERB_ANY, 0, cancel_job },
|
||||
{ "start", 2, VERB_ANY, 0, start_unit },
|
||||
{ "stop", 2, VERB_ANY, 0, start_unit },
|
||||
{ "condstop", 2, VERB_ANY, 0, start_unit }, /* For compatibility with ALTLinux */
|
||||
{ "reload", 2, VERB_ANY, 0, start_unit },
|
||||
{ "restart", 2, VERB_ANY, 0, start_unit },
|
||||
{ "try-restart", 2, VERB_ANY, 0, start_unit },
|
||||
{ "reload-or-restart", 2, VERB_ANY, 0, start_unit },
|
||||
{ "reload-or-try-restart", 2, VERB_ANY, 0, start_unit },
|
||||
{ "force-reload", 2, VERB_ANY, 0, start_unit }, /* For compatibility with SysV */
|
||||
{ "condreload", 2, VERB_ANY, 0, start_unit }, /* For compatibility with ALTLinux */
|
||||
{ "condrestart", 2, VERB_ANY, 0, start_unit }, /* For compatibility with RH */
|
||||
{ "isolate", 2, 2, 0, start_unit },
|
||||
{ "kill", 2, VERB_ANY, 0, kill_unit },
|
||||
{ "is-active", 2, VERB_ANY, 0, check_unit_active },
|
||||
{ "check", 2, VERB_ANY, 0, check_unit_active },
|
||||
{ "is-failed", 2, VERB_ANY, 0, check_unit_failed },
|
||||
{ "show", VERB_ANY, VERB_ANY, 0, show },
|
||||
{ "cat", 2, VERB_ANY, 0, cat },
|
||||
{ "status", VERB_ANY, VERB_ANY, 0, show },
|
||||
{ "help", VERB_ANY, VERB_ANY, 0, show },
|
||||
{ "daemon-reload", VERB_ANY, 1, 0, daemon_reload },
|
||||
{ "daemon-reexec", VERB_ANY, 1, 0, daemon_reload },
|
||||
{ "show-environment", VERB_ANY, 1, 0, show_environment },
|
||||
{ "set-environment", 2, VERB_ANY, 0, set_environment },
|
||||
{ "unset-environment", 2, VERB_ANY, 0, set_environment },
|
||||
{ "import-environment", VERB_ANY, VERB_ANY, 0, import_environment},
|
||||
{ "halt", VERB_ANY, 1, 0, start_special },
|
||||
{ "poweroff", VERB_ANY, 1, 0, start_special },
|
||||
{ "reboot", VERB_ANY, 2, 0, start_special },
|
||||
{ "kexec", VERB_ANY, 1, 0, start_special },
|
||||
{ "suspend", VERB_ANY, 1, 0, start_special },
|
||||
{ "hibernate", VERB_ANY, 1, 0, start_special },
|
||||
{ "hybrid-sleep", VERB_ANY, 1, 0, start_special },
|
||||
{ "default", VERB_ANY, 1, 0, start_special },
|
||||
{ "rescue", VERB_ANY, 1, 0, start_special },
|
||||
{ "emergency", VERB_ANY, 1, 0, start_special },
|
||||
{ "exit", VERB_ANY, 2, 0, start_special },
|
||||
{ "reset-failed", VERB_ANY, VERB_ANY, 0, reset_failed },
|
||||
{ "enable", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "disable", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "is-enabled", 2, VERB_ANY, 0, unit_is_enabled },
|
||||
{ "reenable", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "preset", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "preset-all", VERB_ANY, 1, 0, preset_all },
|
||||
{ "mask", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "unmask", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "link", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "switch-root", 2, VERB_ANY, 0, switch_root },
|
||||
{ "list-dependencies", VERB_ANY, 2, 0, list_dependencies },
|
||||
{ "set-default", 2, 2, 0, set_default },
|
||||
{ "get-default", VERB_ANY, 1, 0, get_default, },
|
||||
{ "set-property", 3, VERB_ANY, 0, set_property },
|
||||
{ "is-system-running", VERB_ANY, 1, 0, is_system_running },
|
||||
{ "add-wants", 3, VERB_ANY, 0, add_dependency },
|
||||
{ "add-requires", 3, VERB_ANY, 0, add_dependency },
|
||||
{ "edit", 2, VERB_ANY, 0, edit },
|
||||
{ "list-units", VERB_ANY, VERB_ANY, VERB_DEFAULT|VERB_NOCHROOT, list_units },
|
||||
{ "list-unit-files", VERB_ANY, VERB_ANY, 0, list_unit_files },
|
||||
{ "list-sockets", VERB_ANY, VERB_ANY, VERB_NOCHROOT, list_sockets },
|
||||
{ "list-timers", VERB_ANY, VERB_ANY, VERB_NOCHROOT, list_timers },
|
||||
{ "list-jobs", VERB_ANY, VERB_ANY, VERB_NOCHROOT, list_jobs },
|
||||
{ "list-machines", VERB_ANY, VERB_ANY, VERB_NOCHROOT, list_machines },
|
||||
{ "clear-jobs", VERB_ANY, 1, VERB_NOCHROOT, daemon_reload },
|
||||
{ "cancel", VERB_ANY, VERB_ANY, VERB_NOCHROOT, cancel_job },
|
||||
{ "start", 2, VERB_ANY, VERB_NOCHROOT, start_unit },
|
||||
{ "stop", 2, VERB_ANY, VERB_NOCHROOT, start_unit },
|
||||
{ "condstop", 2, VERB_ANY, VERB_NOCHROOT, start_unit }, /* For compatibility with ALTLinux */
|
||||
{ "reload", 2, VERB_ANY, VERB_NOCHROOT, start_unit },
|
||||
{ "restart", 2, VERB_ANY, VERB_NOCHROOT, start_unit },
|
||||
{ "try-restart", 2, VERB_ANY, VERB_NOCHROOT, start_unit },
|
||||
{ "reload-or-restart", 2, VERB_ANY, VERB_NOCHROOT, start_unit },
|
||||
{ "reload-or-try-restart", 2, VERB_ANY, VERB_NOCHROOT, start_unit }, /* For compatbility with old systemctl <= 228 */
|
||||
{ "try-reload-or-restart", 2, VERB_ANY, VERB_NOCHROOT, start_unit },
|
||||
{ "force-reload", 2, VERB_ANY, VERB_NOCHROOT, start_unit }, /* For compatibility with SysV */
|
||||
{ "condreload", 2, VERB_ANY, VERB_NOCHROOT, start_unit }, /* For compatibility with ALTLinux */
|
||||
{ "condrestart", 2, VERB_ANY, VERB_NOCHROOT, start_unit }, /* For compatibility with RH */
|
||||
{ "isolate", 2, 2, VERB_NOCHROOT, start_unit },
|
||||
{ "kill", 2, VERB_ANY, VERB_NOCHROOT, kill_unit },
|
||||
{ "is-active", 2, VERB_ANY, VERB_NOCHROOT, check_unit_active },
|
||||
{ "check", 2, VERB_ANY, VERB_NOCHROOT, check_unit_active },
|
||||
{ "is-failed", 2, VERB_ANY, VERB_NOCHROOT, check_unit_failed },
|
||||
{ "show", VERB_ANY, VERB_ANY, VERB_NOCHROOT, show },
|
||||
{ "cat", 2, VERB_ANY, VERB_NOCHROOT, cat },
|
||||
{ "status", VERB_ANY, VERB_ANY, VERB_NOCHROOT, show },
|
||||
{ "help", VERB_ANY, VERB_ANY, VERB_NOCHROOT, show },
|
||||
{ "daemon-reload", VERB_ANY, 1, VERB_NOCHROOT, daemon_reload },
|
||||
{ "daemon-reexec", VERB_ANY, 1, VERB_NOCHROOT, daemon_reload },
|
||||
{ "show-environment", VERB_ANY, 1, VERB_NOCHROOT, show_environment },
|
||||
{ "set-environment", 2, VERB_ANY, VERB_NOCHROOT, set_environment },
|
||||
{ "unset-environment", 2, VERB_ANY, VERB_NOCHROOT, set_environment },
|
||||
{ "import-environment", VERB_ANY, VERB_ANY, VERB_NOCHROOT, import_environment},
|
||||
{ "halt", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "poweroff", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "reboot", VERB_ANY, 2, VERB_NOCHROOT, start_special },
|
||||
{ "kexec", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "suspend", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "hibernate", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "hybrid-sleep", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "default", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "rescue", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "emergency", VERB_ANY, 1, VERB_NOCHROOT, start_special },
|
||||
{ "exit", VERB_ANY, 2, VERB_NOCHROOT, start_special },
|
||||
{ "reset-failed", VERB_ANY, VERB_ANY, VERB_NOCHROOT, reset_failed },
|
||||
{ "enable", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "disable", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "is-enabled", 2, VERB_ANY, 0, unit_is_enabled },
|
||||
{ "reenable", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "preset", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "preset-all", VERB_ANY, 1, 0, preset_all },
|
||||
{ "mask", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "unmask", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "link", 2, VERB_ANY, 0, enable_unit },
|
||||
{ "switch-root", 2, VERB_ANY, VERB_NOCHROOT, switch_root },
|
||||
{ "list-dependencies", VERB_ANY, 2, VERB_NOCHROOT, list_dependencies },
|
||||
{ "set-default", 2, 2, 0, set_default },
|
||||
{ "get-default", VERB_ANY, 1, 0, get_default, },
|
||||
{ "set-property", 3, VERB_ANY, VERB_NOCHROOT, set_property },
|
||||
{ "is-system-running", VERB_ANY, 1, 0, is_system_running },
|
||||
{ "add-wants", 3, VERB_ANY, 0, add_dependency },
|
||||
{ "add-requires", 3, VERB_ANY, 0, add_dependency },
|
||||
{ "edit", 2, VERB_ANY, VERB_NOCHROOT, edit },
|
||||
{}
|
||||
};
|
||||
|
||||
@ -7642,7 +7643,7 @@ int main(int argc, char*argv[]) {
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
|
||||
if (running_in_chroot() > 0 && arg_action != ACTION_SYSTEMCTL) {
|
||||
if (arg_action != ACTION_SYSTEMCTL && running_in_chroot() > 0) {
|
||||
log_info("Running in chroot, ignoring request.");
|
||||
r = 0;
|
||||
goto finish;
|
||||
|
Loading…
x
Reference in New Issue
Block a user