47 lines
1.7 KiB
Diff
47 lines
1.7 KiB
Diff
diff --git a/linux-user/main.c b/linux-user/main.c
|
|
index 124b98c..b010fd2 100644
|
|
--- a/linux-user/main.c
|
|
+++ b/linux-user/main.c
|
|
@@ -1905,6 +1905,10 @@ void usage(void)
|
|
"-cpu model select CPU (-cpu ? for list)\n"
|
|
"-drop-ld-preload drop LD_PRELOAD for target process\n"
|
|
"\n"
|
|
+ "Root options:\n"
|
|
+ "-chroot dir chroot to dir\n"
|
|
+ "-su uid:gid set numeric user and group IDs\n"
|
|
+ "\n"
|
|
"Debug options:\n"
|
|
"-d options activate log (logfile=%s)\n"
|
|
"-p pagesize set the host page size to 'pagesize'\n"
|
|
@@ -2011,6 +2015,28 @@ int main(int argc, char **argv)
|
|
drop_ld_preload = 1;
|
|
} else if (!strcmp(r, "strace")) {
|
|
do_strace = 1;
|
|
+ } else if (!strcmp(r, "chroot")) {
|
|
+ if (chdir(argv[optind++]) || chroot(".")) {
|
|
+ fprintf(stderr, "Can't chroot to '%s' (are you root?)\n",
|
|
+ argv[--optind]);
|
|
+ _exit(1);
|
|
+ }
|
|
+ } else if (!strcmp(r, "su")) {
|
|
+ int temp;
|
|
+ char *gid = strchr(argv[optind], ':');
|
|
+ if (gid) {
|
|
+ temp = atoi(++gid);
|
|
+ if (setresgid(temp, temp, temp)) {
|
|
+ fprintf(stderr, "Can't set gid to %d (are you root?)\n",
|
|
+ temp);
|
|
+ _exit(1);
|
|
+ }
|
|
+ }
|
|
+ temp = atoi(argv[optind++]);
|
|
+ if (setresuid(temp, temp, temp)) {
|
|
+ fprintf(stderr, "Can't set uid to %d (are you root?)\n", temp);
|
|
+ _exit(1);
|
|
+ }
|
|
} else
|
|
{
|
|
usage();
|
|
|
|
|