diff --git a/init/builtins.c b/init/builtins.c index 289f0cded..43508eff1 100644 --- a/init/builtins.c +++ b/init/builtins.c @@ -131,6 +131,18 @@ static void service_start_if_not_disabled(struct service *svc) } } +int do_chdir(int nargs, char **args) +{ + chdir(args[1]); + return 0; +} + +int do_chroot(int nargs, char **args) +{ + chroot(args[1]); + return 0; +} + int do_class_start(int nargs, char **args) { /* Starting a class does not start services diff --git a/init/keywords.h b/init/keywords.h index 6f47379c6..1e2b9c8f9 100644 --- a/init/keywords.h +++ b/init/keywords.h @@ -1,5 +1,7 @@ #ifndef KEYWORD +int do_chroot(int nargs, char **args); +int do_chdir(int nargs, char **args); int do_class_start(int nargs, char **args); int do_class_stop(int nargs, char **args); int do_domainname(int nargs, char **args); @@ -31,6 +33,8 @@ enum { K_UNKNOWN, #endif KEYWORD(capability, OPTION, 0, 0) + KEYWORD(chdir, COMMAND, 1, do_chdir) + KEYWORD(chroot, COMMAND, 1, do_chroot) KEYWORD(class, OPTION, 0, 0) KEYWORD(class_start, COMMAND, 1, do_class_start) KEYWORD(class_stop, COMMAND, 1, do_class_stop) diff --git a/init/parser.c b/init/parser.c index 33c1a6813..0eb078d38 100644 --- a/init/parser.c +++ b/init/parser.c @@ -128,6 +128,8 @@ int lookup_keyword(const char *s) switch (*s++) { case 'c': if (!strcmp(s, "apability")) return K_capability; + if (!strcmp(s, "hdir")) return K_chdir; + if (!strcmp(s, "hroot")) return K_chroot; if (!strcmp(s, "lass")) return K_class; if (!strcmp(s, "lass_start")) return K_class_start; if (!strcmp(s, "lass_stop")) return K_class_stop; diff --git a/init/readme.txt b/init/readme.txt index 665090bad..a185790ac 100644 --- a/init/readme.txt +++ b/init/readme.txt @@ -145,12 +145,18 @@ import hostname Set the host name. +chdir + Change working directory. + chmod Change file access permissions. chown Change file owner and group. +chroot + Change process root directory. + class_start Start all services of the specified class if they are not already running.