aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2008-11-17 06:41:10 +0000
committerJean-Baptiste Queru <jbq@google.com>2009-08-27 07:43:28 -0700
commite7cb137f32fbc7caf97b80fac152b4bd3ac242cd (patch)
treeb6c89e2290d1f8cac6dc1d593d2089c2e22e35e4 /init
parent9f28bde9eb37e7d00df5c2a7c51d88dcd57cef7b (diff)
downloadsystem_core-e7cb137f32fbc7caf97b80fac152b4bd3ac242cd.tar.gz
system_core-e7cb137f32fbc7caf97b80fac152b4bd3ac242cd.tar.bz2
system_core-e7cb137f32fbc7caf97b80fac152b4bd3ac242cd.zip
added chdir/chroot commands to init for mount switching/pivoting
Diffstat (limited to 'init')
-rw-r--r--init/builtins.c12
-rw-r--r--init/keywords.h4
-rw-r--r--init/parser.c2
-rw-r--r--init/readme.txt6
4 files changed, 24 insertions, 0 deletions
diff --git a/init/builtins.c b/init/builtins.c
index 289f0cde..43508eff 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 6f47379c..1e2b9c8f 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 33c1a681..0eb078d3 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 665090ba..a185790a 100644
--- a/init/readme.txt
+++ b/init/readme.txt
@@ -145,12 +145,18 @@ import <filename>
hostname <name>
Set the host name.
+chdir <directory>
+ Change working directory.
+
chmod <octal-mode> <path>
Change file access permissions.
chown <owner> <group> <path>
Change file owner and group.
+chroot <directory>
+ Change process root directory.
+
class_start <serviceclass>
Start all services of the specified class if they are
not already running.