summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-17 11:55:27 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-20 10:30:24 +0100
commitfa028bb2ef1e3cd9a8dfdd8b557e5acda3e11505 (patch)
treee114dddd79c06902df5d24e627fe41a789ca70fb /testsuites
parentshell: Use exiting once initialization (diff)
downloadrtems-fa028bb2ef1e3cd9a8dfdd8b557e5acda3e11505.tar.bz2
shell: Do chroot() after successful login
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/libtests/shell01/init.c38
-rw-r--r--testsuites/samples/fileio/init.c8
2 files changed, 44 insertions, 2 deletions
diff --git a/testsuites/libtests/shell01/init.c b/testsuites/libtests/shell01/init.c
index 248988b32b..bbfa36e6dd 100644
--- a/testsuites/libtests/shell01/init.c
+++ b/testsuites/libtests/shell01/init.c
@@ -49,18 +49,29 @@ static void create_file(const char *name, const char *content)
static void test(void)
{
rtems_user_env_t *uenv;
+ rtems_status_code sc;
+ struct stat st_chroot;
+ struct stat st_workdir;
bool ok;
int rv;
rv = mkdir("/etc", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
rtems_test_assert(rv == 0);
+ rv = mkdir("/chroot", S_IRWXU | S_IRWXG | S_IRWXO);
+ rtems_test_assert(rv == 0);
+
+ rv = lstat("/chroot", &st_chroot);
+ rtems_test_assert(rv == 0);
+
create_file(
"/etc/passwd",
"moop:foo:1:3:blob:a::c\n"
"no:*:2:4::::\n"
"zero::3:5::::\n"
"shadow:x:4:6::::\n"
+ "invchroot::5:7:::/inv:\n"
+ "chroot::6:8:::/chroot:\n"
);
create_file(
@@ -75,6 +86,9 @@ static void test(void)
"F::8:s,moop,t\n"
);
+ sc = rtems_libio_set_private_env();
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
uenv = rtems_current_user_env_get();
rv = setuid(0);
@@ -95,6 +109,9 @@ static void test(void)
ok = rtems_shell_login_check("moop", "false");
rtems_test_assert(!ok);
+ ok = rtems_shell_login_check("invchroot", NULL);
+ rtems_test_assert(!ok);
+
rtems_test_assert(getuid() == 0);
rtems_test_assert(geteuid() == 0);
rtems_test_assert(getgid() == 0);
@@ -122,6 +139,25 @@ static void test(void)
rtems_test_assert(uenv->groups[2] == 4);
rtems_test_assert(uenv->groups[3] == 5);
rtems_test_assert(uenv->groups[4] == 8);
+
+ rv = setuid(0);
+ rtems_test_assert(rv == 0);
+
+ rv = seteuid(0);
+ rtems_test_assert(rv == 0);
+
+ ok = rtems_shell_login_check("chroot", NULL);
+ rtems_test_assert(ok);
+ rtems_test_assert(getuid() == 6);
+ rtems_test_assert(geteuid() == 6);
+ rtems_test_assert(getgid() == 8);
+ rtems_test_assert(getegid() == 8);
+
+ rv = lstat(".", &st_workdir);
+ rtems_test_assert(rv == 0);
+ rtems_test_assert(memcmp(&st_chroot, &st_workdir, sizeof(st_chroot)) == 0);
+
+ rtems_libio_use_global_env();
}
static void Init(rtems_task_argument arg)
@@ -143,7 +179,7 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
-#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 1
+#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 2
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/samples/fileio/init.c b/testsuites/samples/fileio/init.c
index 1c6c88c6a6..4dd00ed7a7 100644
--- a/testsuites/samples/fileio/init.c
+++ b/testsuites/samples/fileio/init.c
@@ -636,9 +636,14 @@ static void fileio_start_shell(void)
printf( "mkdir /etc: %s:\n", strerror(errno) );
}
+ sc = mkdir("/chroot", 0777);
+ if ( sc ) {
+ printf( "mkdir /chroot: %s:\n", strerror(errno) );
+ }
+
printf(
"Creating /etc/passwd and group with three useable accounts\n"
- "root/pwd , test/pwd, rtems/NO PASSWORD"
+ "root/pwd , test/pwd, rtems/NO PASSWORD, chroot/NO PASSWORD"
);
writeFile(
@@ -649,6 +654,7 @@ static void fileio_start_shell(void)
"rtems::1:1:RTEMS Application::/:/bin/sh\n"
"test:$1$$oPu1Xt2Pw0ngIc7LyDHqu1:2:2:test account::/:/bin/sh\n"
"tty:*:3:3:tty owner::/:/bin/false\n"
+ "chroot::4:2:chroot account::/chroot:/bin/sh\n"
);
writeFile(
"/etc/group",