systemctl: make most systemctl commands NOPs in a chroot() environment
authorLennart Poettering <lennart@poettering.net>
Thu, 28 Jan 2016 18:32:26 +0000 (19:32 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 29 Jan 2016 14:49:05 +0000 (15:49 +0100)
Fixes #2015

src/systemctl/systemctl.c

index c7402b5..1dab976 100644 (file)
@@ -7325,70 +7325,70 @@ 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        },
+                { "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              },
                 {}
         };